Выполнение команды после цикла for в командном файле? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть пакетный файл, который в настоящее время выполняет две функции: сначала он переходит в нужный каталог, затем запускается оператор for для удаления каждого файла, который не является определенным файлом, содержимое файла bat выглядит следующим образом:

cd "bin\drivers" && for %%i in (*.*) do if not %%i == lol.exe del %%i

Это работает отлично, но я хочу сделать некоторые другие вещи после того, как это для оператора for выполнено, что-то вроде этого:

cd "bin\drivers" && for %%i in (*.*) do if not %%i == lol.exe del %%i && cd ../../../ && start server

Но проблема в том, чтохотя он выполняет операторы после цикла for, цикл for выполняется только для одной итерации, поэтому он удаляет только один файл и переходит к следующему оператору в файле bat (который является cd, а затем запускает сервер). Могу ли я что-нибудь сделать, чтобы операторы после оператора for выполнялись после всего цикла for вместо одной итерации?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Согласно моему комментарию, вот ваша единственная строка с соответствующим использованием скобок и амперсандов.

@CD bin\drivers 2>NUL && ((For %%# In (*) Do @If /I Not "%%#"=="lol.exe" Del "%%#") & CD ..\..\.. 2>NUL && Start server

Однако я не вижу причин для изменения каталогов, поэтому это может быть проще:

@(For %%# In (bin\drivers\*) Do @If /I Not "%%~nx#"=="lol.exe" Del "%%#") & Start ..\server
0 голосов
/ 10 ноября 2019

Это будет цикл первым, когда цикл будет завершен, он будет выполнять только сервер.

@echo off
if not exist "bin\drivers" goto :eof
cd /d "bin\drivers"
for %%i in (*) do if not "%%~i" == "lol.exe" del "%%~i"
cd /d ..\..\..\
start server
...