Я не думаю, что мой вопрос дублирует batch: код выхода для rd также равен 0 при ошибке, потому что я перепробовал все из этого ответа, и это не помогло (как вы можете видеть на снимках экрана ниже).
Допустим, я хочу удалить каталог с файлами в нем. Но я не хочу, чтобы скрипт продолжал выполняться в случае ошибки. Итак, я попытался:
ECHO 3. Deleting Client index folder which will be rebuilt if it actually exist...
rmdir /S /Q "XXX"
ECHO %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 ECHO Failed to delete client index folder... & GOTO :End
Но переменная %ERRORLEVEL% всегда была равна 0.
Затем я нашел похожие вопросы в Stackoverflow и изменил сценарий на этот:
ECHO 3. Deleting Client index folder which will be rebuilt if it actually exist...
rmdir /S /Q "XXX" && echo OK || echo ERROR
ECHO %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 ECHO Failed to delete client index folder... & GOTO :End
Но проблема в том, что я хочу, чтобы скрипт продолжал работать, если папка не существует (т.е. уже удалена). С этой реализацией это не сработало.
Итак, я изменил сценарий следующим образом:
ECHO 3. Deleting Client index folder which will be rebuilt if it actually exist...
if exist "XXX" (rmdir /S /Q "%4_%5" && echo OK || echo ERROR)
ECHO %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 ECHO Failed to delete client index folder... & GOTO :End
Ааааааа, и он перестал снова устанавливать переменную %ErrorLevel% в случае блокировки файла...
Я пытался удалить скобки после условия «существует». Пытался изменить «если есть» на «2>nul», но ни один из этих вариантов не работает так, как мне нужно. Любые предложения о том, как я должен это исправить?
if exist xxx rd /s /q xxx
, затемif exist xxx echo Oops
, затемif exist xxx goto :End
кратко и понятно. - person Harry Johnston   schedule 30.09.2017rd
иногда случайным образом выходит из строя. Вы можете решить эту проблему, повторив первую строку, то естьif exist xxx rd /s /q xxx
, за которой следуетif exist xxx rd /s /q xxx
, а затем проверьте наличие ошибки. Делать это дважды кажется излишним, но это будет делать его более надежным. - person Harry Johnston   schedule 30.09.2017