У меня есть запланированная задача, которая запускает командный файл, и, хотя я вижу результаты успешного завершения, в соответствии с планировщиком задач он завершается с ошибкой 0xff, каждый раз.
У меня запланированы другие командные файлы, которые также успешно завершаются и возвращаются 0x0 как они должны. Единственное различие, которое я вижу между этими файлами, заключается в том, что рабочие заканчиваются на:
IF ERRORLEVEL 1 (
("notify me" script here)
)
тогда как сломанный заканчивается:
IF %2==something (
(run a program here)
IF ERRORLEVEL 1 (
(same "notify me" script here)
)
)
Возвращает ли блок IF 0xff если ложь что ли? В чем дело?
Синтаксис, который вы ищете:
IF "%2"=="SOMETHING" (
Когда% 2 пуст, у вас есть строка:
IF ==SOMETHING (
Это неверный синтаксис. Если поместить в него кавычки, получится:
IF ""=="SOMETHING" (
Это действительно так.
После некоторого тестирования я понял, что блоки IF в порядке, они, похоже, не меняют уровень ошибки, но испортил это «% 2 == что-то» - раз, когда происходили сбои, не было второй параметр, передаваемый в командный файл. Поэтому я не уверен, как «безопасно» проверить, существует ли параметр (то есть, чтобы он не вызывал ошибку 0xff, когда его нет), за исключением, может быть, еще одного IF ERRORLEVEL после этого. Но в любом случае я просто изменил запланированную задачу, чтобы у нее всегда был второй параметр (независимо от того, «что-то» или нет), и, похоже, он возвращал 0x0, как и должен сейчас.