Я не считаю, что это возможно по умолчанию. Задача выполнена успешно, в том смысле, что она запускалась в запланированное время и запускала любое приложение (приложения), которое вы хотели. Тот факт, что одно из приложений вызвало ошибку, не относится к проблеме планировщика заданий.
Однако, я был в состоянии достигнуть почти то, что вы хотите: вы можете поднять ошибку на одно из действий (не на самой задаче), убедившись, что задача не может найти программу, должен выполняться как часть задачи.
Так что я создал задачу, которая работает 3 действия:
- MyActualBatch.cmd
- MyExe.exe
- MyResult.cmd
MyBatch.cmd файла содержит следующий код:
@echo off
if exist MyExe.exe del MyExe.exe
if exist result.cmd del result.cmd
set myError=0
:: *********** Do all your processing here **********
:: .....
:: Store your specific error code in %myError%, or to 0 to indicate success e.g.:
set myError=399
:: .....
:: *********** End batch file with following lines **********
if /I %myError% EQU 0 (
:: No error, so let's copy some small executable that the task can actually run
:: without impacting the results of the task
copy /y C:\Windows\System32\ipconfig.exe MyExe.exe > nul
)
:: Create a batch file that will instantly exit using the original error code
:: created in this one
echo exit /b %myError% > result.cmd
exit /b %myError%
(или, без комментариев, которые загромождают экран):
@echo off
if exist MyExe.exe del MyExe.exe
if exist result.cmd del result.cmd
set myError=399
if /I %myError% EQU 0 (
copy /y C:\Windows\System32\ipconfig.exe MyExe.exe > nul
)
echo exit /b %myError% > result.cmd
exit /b %myError%
Всякий раз, когда ваш пакетный файл должен вызвать ошибку, вы установите myError переменное значение, которое вы хотите вернуть (я предпочитаю с помощью моего а не полагаться на систему ERRORLEVEL var, которая может быть сброшена практически любым действием).
В конце скрипта некоторый код проверяет, содержит ли myError var 0 (что означает отсутствие ошибки). Если это так, то пакет создает исполняемый файл с именем MyExe.exe, что задача будет выполнена сразу после завершения этого командного файла.Но если myError содержит другое значение ошибки, тогда файл MyExe не будет создан, что вызовет ошибку 203 в задаче при попытке запустить ее дальше.
И наконец, файл Result.cmd также создан, поэтому его можно запустить как последнее действие этой задачи, создав код ошибки, который вы создали в первой задаче.
Примечание: файл MyExe является только копией IpConfig.exe. Я выбрал этот исполняемый файл просто потому, что AFAIK доступен во всех версиях Windows, он маленький, и он просто перечисляет информацию, поэтому он не может сломать что-либо, работая как часть задачи.
Вместо 'RETURN', как насчет' EXIT/B 399'? – lit