Я довольно новичок в этом форуме, поэтому сначала хочу поблагодарить вас за предоставление мне решений даже до того, как я стал участником :).Не могу получить errorlevel от неудачной команды MOVE в пакетном скрипте
Так что у меня этот код:
for %%a in ("%PBpath%") do (
move "network location 1 files" "network location 2" >NUL
if ERRORLEVEL 0 (echo Diagram %%~na.pdf was successfuly archived) else (echo Diagram %%~na.pdf was not archived)
ECHO.%errorlevel%
)
Проблема заключается в том, что я не могу получить ErrorLevel, отличный от 0. Даже если файлы, которые должны быть скопированы, отсутствуют места, я до сих пор получаю успешное архивированное сообщение эхом. Я искал форум для подобных вопросов, но я не мог заставить его работать по какой-то причине. Есть ли что-то другое между копией и командой ping (команда ping возвращает правильный код выхода в уровне ошибок), потому что я не могу получить его ни с копией, ни с перемещением ...
Спасибо! Эндрю
Благодарим за ответы. Ответ Супербоба действительно решил мою проблему, большое спасибо. Это действительно противоречивое поведение. Однако команда ECHO.% Errorlevel% в моем примере все еще возвращает 0, поэтому в моем случае она не установлена в 1. Что касается ответа Эндоро, можете быть более конкретным? Я попытался использовать% ERRORLEVEL% == 0, так как никакой другой вариант не работал бы с errorlevel в качестве переменной, но здесь и результата не было. – user2844129
У вас есть какие-либо утверждения между IF ERRORLEVEL 1 и ECHO.% Errorlevel%? Если это так, они могут сбросить уровень ошибок. Я просто попробовал «если ERRORLEVEL 1 (echo ErrorLevel% ERRORLEVEL%, файл не архивирован) else (echo ErrorLevel% ERRORLEVEL%, файл успешно архивирован)' и получил ожидаемый результат 'ErrorLevel 1, файл не архивирован' – Superbob
Нет, t есть что-то среднее между ними, но вы правы, это работает. Проблема заключалась в том, что я повторял «% ERRORLEVEL%» внутри цикла for, и я включил DelayedExpansion. Я должен был использовать! и это сработало. Спасибо за помощь! – user2844129