Natknąłem się na ten artykuł w wynikach zwróconych przez wyszukiwanie związane z poleceniem IF w pliku wsadowym i nie mogłem oprzeć się możliwości poprawienia błędnego przekonania, że bloki IF są ograniczone do pojedynczych poleceń. Poniżej znajduje się część produkcyjnego skryptu poleceń systemu Windows NT, który jest uruchamiany codziennie na komputerze, na którym tworzę tę odpowiedź.
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%
)
Być może bloki dwóch lub więcej wierszy dotyczą wyłącznie skryptów poleceń systemu Windows NT (plików .CMD), ponieważ przeszukanie katalogu skryptów produkcyjnych aplikacji, które jest ograniczone do plików wsadowych starej szkoły (.BAT), ujawniło tylko bloki jednego polecenia . Ponieważ aplikacja przeszła w rozszerzoną konserwację (co oznacza, że nie jestem aktywnie zaangażowana we wspieranie jej), nie mogę powiedzieć, czy to dlatego, że nie potrzebowałem więcej niż jednej linii, czy też nie mogłem sprawić, by działały.
Niezależnie od tego, jeśli to ostatnie jest prawdą, istnieje proste obejście; przenieść wiele wierszy albo do oddzielnego pliku wsadowego, albo do podprocedury pliku wsadowego. Wiem, że ta ostatnia działa w obu rodzajach skryptów.