If/then/else в пакете Windows
В оболочке script у меня есть следующий код:
if echo Mr.32 ; then
echo Success
else
echo Failed
exit
fi
Каков эквивалентный синтаксис для пакетных файлов Windows?
Ответы
Ответ 1
Мне сложно представить, когда ECHO завершится с возвратом ERRORLEVEL, не равным 0. Я предполагаю, что он может выйти из строя, если выход был перенаправлен в файл, а целевой диск заполнен.
CptHammer опубликовал хорошее решение с использованием ERRORLEVEL, хотя он использует GOTO без необходимости. Это можно сделать без использования GOTO:
ECHO Mr.32
if errorlevel 1 (
echo Failed
exit /b
) else (
echo Success
)
Существует более простой способ предпринять действия по УСПЕХУ или НЕИСПРАВНОСТИ любой команды.
command && success action || failure action
В вашем случае
ECHO Mr.32&& (
echo Success
) || (
echo Failed
exit /b
)
Ответ 2
Я думаю, что что-то вроде этого может сделать трюк:
REM run the command
ECHO Mr.32
IF ERRORLEVEL 1 GOTO failLabel
:successLabel
REM put code to execute in case of success here.
ECHO Success
GOTO endLabel
:failLabel
REM put code here that should be executed in case of failure.
ECHO Failed
:endLabel
Это предполагает команду, которую вы хотите протестировать (здесь: echo MR.32) возвращает 0 при успехе и что-то большее при сбое (BEWARE: Echo в большинстве окон не вернет ничего, и поэтому фактическое значение, которое тестируется в этом script - это, вероятно, код возврата из последней команды, выполненной непосредственно перед script. Вероятно, вам лучше проверить с помощью команды: "DIR someFile.txt", которая вернет 0, если somefile.txt существует и 1 в противном случае. )
Это верно, поскольку дбэмэм отметил, что эта структура использует много GOTO. Это связано с тем, что эта структура GOTO является единственной, которая будет хорошо понятна во всех версиях Windows. Более компактные версии появились со временем, но они будут работать только в последних версиях Windows.