Я думаю, что у меня есть общее представление об ERRORLEVEL и %ERRORLEVEL%, но !ERRORLEVEL! смущает меня.
Я делаю скрипт, который вызывает исполняемый файл, затем список задач, чтобы увидеть, работает ли он, затем тасккилл, чтобы убить его, если это так, а затем пытаюсь вывести уровни ошибок и повторять для других исполняемых файлов, и я понимаю, что я действительно не понимаю уровни ошибок в пакете.
Я установил переменную, равную !errorlevel! затем использовал эту переменную без кавычек в эхе, и переменная изменилась с одного uint16 на другой uint16, когда после набора произошла ошибка, например, это ссылка на реальную вместо копии. Я хочу копию. Кто-нибудь может объяснить разницу между этими парнями?
Обновление: вот фрагмент, над которым я работаю.
for %%P in (%executableList%) do (
echo ----------------------------------------------------------------------------------
set exeErrorlevel=0
set running=false
start %%~fP
set exeErrorlevel=!ERRORLEVEL!
rem for debugging purposes
echo %%~nP%%~xP older errorlevel %ERRORLEVEL%
echo %%~nP%%~xP newer errorlevel !ERRORLEVEL!
echo before tasklist running var is : !running!
tasklist /FI "IMAGENAME eq %%~fP" | find /I /N /C "%%~fP" >nul && set running=true
echo after tasklist is running var is: !running!
if !running! equ true (
echo %%~nP%%~xP Program is running
taskkill /F /IM %%~nP%%~xP /T
echo %%~nP%%~xP Program was killed
if !exeErrorlevel! == 0 (
echo %passString% %%~nP%%~xP process was started and killed safely
echo %passString% %%~nP%%~xP process was started and killed safely >>%outputfile%
) else (
echo %failString% %%~nP%%~xP process was killed with errorcode !exeErrorlevel!
echo %failString% %%~nP%%~xP process was killed with errorcode !exeErrorlevel! >>%outputfile%
)
) else (
if !exeErrorlevel! == 0 (
echo %passString% %%~nP%%~xP process exited safely
echo %passString% %%~nP%%~xP process exited safely >>%outputfile%
) else (
taskkill /F /IM %%~nP%%~xP /T
echo %failString% %%~nP%%~xP process abruptly exited with errorcode !exeErrorlevel!
echo %failString% %%~nP%%~xP process abruptly exited with errorcode !exeErrorlevel! >>%outputfile%
)
)
echo. >>%outputfile%
)
Мне нужно убедиться, что exeErrorlevel имеет копию уровня ошибок в определенный момент времени - я хочу фиксировать ошибки только из exe, а не из успеха/неудачи списка задач/поиска/задачи. Я обеспокоен тем, что exeerrorlevel из-за отложенного расширения обращается к отложенному уровню ошибок при выполнении. возможно, вместо этого следует установить exeErrorlevel=%errorlevel%. В строке, где я повторяю старые и новые переменные, обычно возвращаются разные целые числа? Во всех моих тестовых прогонах %errorlevel% обычно возвращает 0, тогда как !errorlevel! постоянно отличен от нуля для исполняемых файлов с неверными кодами выхода.
var=!errorlevel!
без активного отложенного расширения, а затем выполнилиecho %var%
с активным отложенным расширением, но, не видя кода, мы просто предполагаем. - person MC ND   schedule 23.03.2017