Как я делаю пакетный файл оконечным после обнаружения с ошибкой?

Вы пропускаете оператор return в случае, когда цикл for не выполняется в методе moreThanOnce.

270
задан Nakilon 18 September 2014 в 23:13
поделиться

2 ответа

Проверьте уровень ошибки в операторе if , а затем exit / b (выход только из файла atch b , но не всего процесса cmd.exe) для значений, отличных от 0.

same-executable-over-and-over.exe /with different "parameters"
if %errorlevel% neq 0 exit /b %errorlevel%

Если вы хотите, чтобы значение уровня ошибки распространялось за пределы ваш пакетный файл

if %errorlevel% neq 0 exit /b %errorlevel%

, но если он находится внутри для , он становится немного сложнее. Вам нужно что-то более похожее на:

setlocal enabledelayedexpansion
for %%f in (C:\Windows\*) do (
    same-executable-over-and-over.exe /with different "parameters"
    if !errorlevel! neq 0 exit /b !errorlevel!
)

Редактировать: Вы должны проверять ошибку после каждой команды. В пакете cmd.exe / command.com нет общего типа конструкции «при ошибке». Я также обновил свой код в соответствии с CodeMonkey , хотя я никогда не сталкивался с отрицательным уровнем ошибок ни в одном из моих пакетных хакеров в XP или Vista.

275
ответ дан Community 23 November 2019 в 02:18
поделиться

Одно незначительное обновление, вы должны изменить проверки «if errorlevel 1» на следующее ...

IF %ERRORLEVEL% NEQ 0 

Это потому, что в XP вы можете получить отрицательные числа как ошибки. 0 = нет проблем, все остальное - проблема.

И имейте в виду, как DOS обрабатывает тесты «IF ERRORLEVEL». Он вернет true, если номер, который вы проверяете, это число или больше, поэтому, если вы ищете конкретные номера ошибок, вам нужно начать с 255 и работать вниз.

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

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