Вы пропускаете оператор return в случае, когда цикл for не выполняется в методе moreThanOnce.
Проверьте уровень ошибки
в операторе 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.
Одно незначительное обновление, вы должны изменить проверки «if errorlevel 1» на следующее ...
IF %ERRORLEVEL% NEQ 0
Это потому, что в XP вы можете получить отрицательные числа как ошибки. 0 = нет проблем, все остальное - проблема.
И имейте в виду, как DOS обрабатывает тесты «IF ERRORLEVEL». Он вернет true, если номер, который вы проверяете, это число или больше, поэтому, если вы ищете конкретные номера ошибок, вам нужно начать с 255 и работать вниз.