PDA

Показать полную графическую версию : [решено] Перенос строки в cmd "for in () do @( )"


shadowbat
16-12-2019, 13:39
Есть однострочный код
cmd /v/c "for %%i in ("%CD%\*.txt") do @(call rename "%%i" "%%~ni1.txt" & call echo 1)"
pause

Как внедрить туда перенос строки, чтобы получилось что-то подобное?
cmd /v/c "for %%i in ("%CD%\*.txt") do @(call rename "%%i" "%%~ni1.txt" & ^
call echo 1)"
pause

Если нельзя, то просто напишите что нельзя

alpap
16-12-2019, 15:38
shadowbat, я не могу только понять зачем там call
внедрить туда перенос строки »
в общем случае так:

@echo off
cmd /v/c "for %%a in (x) do set "z=%%a^"^&^
echo !z!"
pause

не зная вашей задачи определенно нельзя сказать как именно у вас будет, надо или экспериментировать или еще раз, точно знать задачу, кстати более чем уверен что cmd /v/c можно обойти и не будет проблемы однострочника.

shadowbat
16-12-2019, 16:02
^&^ »

без кавычек работает

cmd /v/c for %%i in ("%CD%\*.txt") do @(call rename "%%i" "%%~ni1.txt" ^&^
call echo 1)
pause


но в первом сообщении есть кавычки и с ними не работает

cmd /v/c "for %%i in ("%CD%\*.txt") do @(call rename "%%i" "%%~ni1.txt" ^&^
call echo 1)"
pause


как и этот вариант, не работает без кавычек и не работает с ^&^

cmd /v/c "for %%i in ("%CD%\*.txt") do @(set "E=%%~xi" ^&^
call echo "%%~ni_%%E:~1%%")"
pause

alpap
16-12-2019, 17:14
shadowbat, невнимательно смотрели мой пример:

@echo off
cmd /v/c "for %%i in ("%CD%\*.txt") do @(call rename "%%i" "%%~ni1.txt^"^&^
call echo 1)"
pause

shadowbat
16-12-2019, 17:34
alpap, прекрасно, всё работает после добавление третьей ^

cmd /v/c "for %%i in ("%CD%\*.txt") do @(call echo 1^"^&^
call rename "%%i" "%%~ni1.txt")"
pause

в таком коде результат выводится такой
1"
1"
1"

как перенести без кавычки? или перед переносом всегда должна стоять кавычка (^"^&^)?
пока временное решение - пустое echo как невидимый оператор переноса строки:
& call @echo^"^&^
cmd /v/c "for %%i in ("%CD%\*.txt") do @(call echo 1 & call @echo^"^&^
call rename "%%i" "%%~ni1.txt")"
pause

alpap
16-12-2019, 18:35
shadowbat, смысла не догнали? Все просто:
(простыми словами, последняя парная кавычка текущей строки хочет быть собственностью окончания функции команд cmd, а наша задача сделать это не так)

@echo off
cmd /v/c "for %%i in ("%CD%\*.txt^") do @(call echo 1^&^
call rename "%%i" "%%~ni1.txt")"
pause




© OSzone.net 2001-2012