Я наткнулся на эту статью в результатах поиска, связанных с командой IF в пакетном файле, и не мог устоять перед возможностью исправить неправильное представление о том, что блоки IF ограничены отдельными командами. Ниже приводится часть рабочего командного сценария Windows NT, который ежедневно выполняется на машине, на которой я составляю этот ответ.
if "%COPYTOOL%" equ "R" (
WWLOGGER.exe "%APPDATA%\WizardWrx\%~n0.LOG" "Using RoboCopy to make a backup of %USERPROFILE%\My Documents\Outlook Files\*"
%TOOLPATH% %SRCEPATH% %DESTPATH% /copyall %RCLOGSTR% /m /np /r:0 /tee
C:\BIN\ExitCodeMapper.exe C:\BIN\ExitCodeMapper.INI[Robocopy] %TEMP%\%~n0.TMP %ERRORLEVEL%
) else (
WWLOGGER.exe "%APPDATA%\WizardWrx\%~n0.LOG" "Using XCopy to make a backup of %USERPROFILE%\My Documents\Outlook Files\*"
call %TOOLPATH% "%USERPROFILE%\My Documents\Outlook Files\*" "%USERPROFILE%\My Documents\Outlook Files\_backups" /f /m /v /y
C:\BIN\ExitCodeMapper.exe C:\BIN\ExitCodeMapper.INI[Xcopy] %TEMP%\%~n0.TMP %ERRORLEVEL%
)
Возможно, блоки из двух или более строк применяются исключительно к командным сценариям Windows NT (файлам .CMD), поскольку поиск в каталоге производственных сценариев приложения, которое ограничено пакетными файлами старой школы (.BAT), выявил только блоки с одной командой . Поскольку приложение находится на расширенном обслуживании (это означает, что я не принимаю активного участия в его поддержке), я не могу сказать, произошло ли это потому, что мне не требовалось более одной строки, или я не мог заставить их работать.
В любом случае, если последнее верно, есть простой обходной путь; переместите несколько строк в отдельный пакетный файл или подпрограмму пакетного файла. Я знаю, что последний работает в обоих типах скриптов.