Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Добавление строки в начало текстового файла BAT (http://forum.oszone.net/showthread.php?t=346788)

VPOISKE 22-10-2020 08:40 2937170

Добавление строки в начало текстового файла BAT
 
Добрый день,

1 вопрос
Как объеденить два кода в один, чтобы не создавать несколько bat файлов?
Ниже приведенный код переименовывает любой файл находящийся по адресу C:\123\123 в file.txt
Код:

@echo off
  pushd C:\123\123
    for /f "delims=" %%i in ('dir /a-d/b/s *.*') do ren "%%i" "file.txt"
  popd
exit /b


2 вопрос
У меня есть код который добавляет строку WORD,1234,A,B,C в начало текста. Однако после, в тексте появляется спецсивмол в конце всех строк (В notepad++ выглядит так ).
Пожалуйста помогите исправить код либо дополнить чтобы удалялся последний символ.

Код:

set line=!line::=:00!
   
@echo off

pushd C:\123\123
   
for %%a in (file.txt) do (
    >>$ echo WORD,1234,A,B,C
    >nul (copy $+"%%a"& move $ "%%a")
  )
 
set xname=%xname:s=s%
 
exit /b


VPOISKE 22-10-2020 10:53 2937185

Вложений: 1
megaloman, Notepad ++ показывает, что это UTF-8

Прикрепил файл примера:
Файл 162738

megaloman 22-10-2020 16:26 2937227

Код:

@Echo Off
        Set "Folder=Z:\Soft_In"
        Set "Mask=*.*"
        Set "Fname=file.txt"
       
        FOR %%f IN ("%Folder%\%Mask%") DO (
                If /I Not "%Fname%"=="%%~nxf" (
                        >"%Temp%\%~nx0.tmp" (Echo WORD,1234,A,B,C)
                        >nul Copy /B "%Temp%\%~nx0.tmp"+"%%f" "%%~dpf\%Fname%"
                        Del "%%f" "%Temp%\%~nx0.tmp"
                        Exit /B
                )
        )
Exit /B


greg zakharov 22-10-2020 20:58 2937250

Берём miniperl и вводим в консоли команду:
Код:

miniperl -i.bak -pe "print \"WORD,1234,A,B,C\n\" if $.==1" Z:\Soft_In\file.txt
Заодно бэкап файла создадим таким образом.
Не нравится miniperl (хотя это ведь всего-навсего один единственный бинарник), можно взять miniruby - комадна будет в точности такой же.
Код:

miniruby -i.bak -pe "print \"WORD,1234,A,B,C\n\" if $.==1" Z:\Soft_In\file.txt
Не нравится ни то, ни другое, - берём pwsh:
Код:

$$=,'WORD,1234,A,B,C'+(gc Z:\Soft_In\file.txt);$$>Z:\Soft_In\file.txt
Не пришёлся по вкусу pwsh? - используем sed:
Код:

sed -i.bak "1i\WORD,1234,A,B,C" Z:\Soft_In\file.txt

Iska 23-10-2020 01:16 2937269

Цитата:

Цитата VPOISKE
Ниже приведенный код переименовывает любой файл находящийся по адресу C:\123\123 в file.txt »

Вообще-то, нет. Он пытается переименовать все файлы в указанном каталоге в file.txt.

megaloman 23-10-2020 09:42 2937286

Цитата:

Цитата VPOISKE
Ниже приведенный код переименовывает любой файл находящийся по адресу C:\123\123 в file.txt »

Цитата:

Цитата Iska
Вообще-то, нет. Он пытается переименовать все файлы в указанном каталоге в file.txt. »

Вообще-то да. Но тут становится все интереснее и интереснее, так как постановка задачи не очень четкая. Естественно, будет переименован только один файл (ren не позволит сделать больше), да и то, при условии, что в папке нет уже file.txt. А если есть, что делать?
Я нафантазировал такой вариант: не обращая внимания, есть ли файл file.txt или нет, беру другой файл, объединяю его с файлом с добавочной строкой, обзываю его file.txt, естественно при этом, если такой файл уже был, он будет переписан, а далее убиваю исходный файл.
Если в папке один и только один file.txt, он обработан не будет.

VPOISKE 24-10-2020 08:27 2937383

megaloman, Примите благодарность от меня, это ровно то, что мне было нужно! Спасибо!


Время: 09:19.

Время: 09:19.
© OSzone.net 2001-