Войти

Показать полную графическую версию : Добавление строки в начало текстового файла BAT


VPOISKE
22-10-2020, 08:40
Добрый день,

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++ выглядит так https://i.stack.imgur.com/Ltv3d.png).
Пожалуйста помогите исправить код либо дополнить чтобы удалялся последний символ.

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
megaloman, Notepad ++ показывает, что это UTF-8

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

megaloman
22-10-2020, 16:26
@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
Берём 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
Ниже приведенный код переименовывает любой файл находящийся по адресу C:\123\123 в file.txt »
Вообще-то, нет. Он пытается переименовать все файлы в указанном каталоге в file.txt.

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

VPOISKE
24-10-2020, 08:27
megaloman, Примите благодарность от меня, это ровно то, что мне было нужно! Спасибо!




© OSzone.net 2001-2012