Использую пару серверов на работе под управлением Windows Server 2008 и заметил, что мои пакетные сценарии больше не работают корректно.
Проще говоря, любой оператор, проверяющий ERRORLEVEL, кажется успешным, независимо от того, какой код выхода вы ему дадите. Например, в новом командном окне:
if ERRORLEVEL 1 echo hello
не должен ничего печатать, так как предыдущий выход должен был быть 0. Что ж, это нормально работает на моем рабочем столе Windows 7, но не на этих серверах. Это в основном ломает все мои сценарии.
Есть ли какие-либо обновления патчей или другие изменения, которые могли быть внесены на серверы, чтобы это произошло? Я не единственный, у кого есть права администратора на этих серверах, но мне нужно немного больше информации, прежде чем указывать обвиняющим пальцем!
Отойти от ЕСЛИ УРОВЕНЬ ОШИБКИ. Следующее гораздо более надежно (и предсказуемо):
REM *** do something
%SystemRoot%\System32\robocopy.exe blah blah
set /a RC=%ERRORLEVEL%
REM *** now use the RC variable, which won't be interferred with
if %RC% == 0 goto XYZ
if %RC% == 1 goto ABC
Я ценю, что вы пытаетесь избежать повторной записи, но я определенно рекомендую вышеуказанное (или PowerShell, конечно!).