Пакет Windows: призовите больше чем один управляет ДЛЯ цикла?

Действительно ли возможно в пакетном файле Windows назвать больше чем одну команду на сингле FOR цикл? Скажем, например, я хочу распечатать имя файла и после того, как удалят его:

@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.

Я знаю в этом случае, что я мог решить его путем выполнения двух отличных ДЛЯ циклов: один для показа имени и один для удаления файла, но действительно ли возможно сделать это в одном цикле только?

116
задан Ross Ridge 15 December 2016 в 19:36
поделиться

3 ответа

FOR /r %%X IN (*) DO (ECHO %%X & DEL %%X)
109
ответ дан 24 November 2019 в 02:12
поделиться

SilverSkin и Anders оба правы. Вы можете использовать круглые скобки для выполнения нескольких команд. Однако необходимо убедиться, что сами команды (и их параметры) не содержат круглых скобок. cmd жадно ищет первую закрывающую круглую скобку, вместо того чтобы изящно обрабатывать вложенные наборы круглых скобок. Это может привести к тому, что остальная часть командной строки не будет разобрана, или некоторые скобки будут переданы командам (например, DEL myfile.txt)).

Обходным решением для этого является выделение тела цикла в отдельную функцию. Обратите внимание, что вам, вероятно, придется прыгать вокруг тела функции, чтобы не "провалиться" в нее.

FOR /r %%X IN (*.txt) DO CALL :loopbody %%X
REM Don't "fall through" to :loopbody.
GOTO :EOF

:loopbody
ECHO %1
DEL %1
GOTO :EOF
30
ответ дан 24 November 2019 в 02:12
поделиться

Использование и подходит для коротких команд, но эта единственная строка может очень быстро стать очень длинной. Когда это произойдет, переключитесь на многострочный синтаксис.

FOR /r %%X IN (*.txt) DO (
    ECHO %%X
    DEL %%X
)

Размещение ( и ) имеет значение. Круглые скобки после DO должны быть помещены в одну строку, иначе командный файл будет некорректным.

Подробнее см. if /? | Find / V "" .

190
ответ дан 24 November 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: