Можно ли в командном файле Windows вызывать более одной команды в одном FOR
цикле? Скажем, например, я хочу напечатать имя файла и после его удаления:
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.
Я знаю, что в этом случае я мог бы решить эту проблему, выполнив два отдельных цикла FOR: один для отображения имени и один для удаления файла, но можно ли сделать это только в одном цикле?
windows
batch-file
cmd
Марко Демайо
источник
источник
for %i in (1 2 3) do echo %i & echo foo
печатает то, что я ожидал: «1», «foo», «2», «foo», «3», «foo» (в отдельных строках).&&
лучше, чем&
?&&
завершится ошибкой, если первая команда не удалась,&
независимо от того , выполнит вторую команду.DO
неэкранированный парен между -parens. Вы можете избежать их, добавив^
к ним.Использование
&
подходит для коротких команд, но эта единственная строка может очень быстро стать очень длинной. Когда это произойдет, переключитесь на многострочный синтаксис.Размещение
(
и)
имеет значение. Круглые скобки послеDO
должны быть помещены в одну строку, иначе командный файл будет некорректным.Подробнее
if /?|find /V ""
см.источник
DO
символа НЕ следует помещать в следующую строку, иначе это приведет к остановке командного файла. В коде, когда я пишу цикл for, я обычно помещаю фигурную скобку в{
следующую строку.СильверСкин и Андерс правы. Вы можете использовать круглые скобки для выполнения нескольких команд. Однако вы должны убедиться, что сами команды (и их параметры) не содержат скобок.
cmd
жадно ищет первую закрывающую скобку вместо того, чтобы изящно обрабатывать вложенные наборы скобок. Это может привести к тому, что остальная часть командной строки не будет проанализирована, или это может привести к тому, что некоторые из круглых скобок будут переданы командам (напримерDEL myfile.txt)
).Обходной путь - разделить тело цикла на отдельную функцию. Обратите внимание, что вам, вероятно, придется перепрыгивать через тело функции, чтобы не «проваливаться» в него.
источник
C:\Program Files (x86)
.