Я новичок в пакетном сценарии Windows, но мне удалось заставить работать то, что мне нужно. Он работает при выполнении вручную, но когда диспетчер задач выполняет сценарий, он не завершается. Результат последнего запуска: «(0xff)».
Сценарий прост:
@echo off
for /f %%i in ('VerifyWarehouseLoad.exe') do set RESULT=%%i
IF %RESULT%==1 (
start /wait /d "C:\Program Files\Sisense\Prism" psm ecube build name="Test" serverAddress="LocalHost" mode="restart"
)
@end
Он отлично работает только с началом строки start /wait
.
Я запускаю консольное приложение с именем VerifyWarehouseLoad (расположенное в том же каталоге, что и пакетный файл, фиксирует вывод, и если значение равно 1, оно запускает строку в блоке IF.
Я читаю, что (0xff) является синтаксической ошибкой, но это кажется неправильным, если он отлично обрабатывается вне Планировщика заданий ...
Спасибо за любую помощь.
@end
Это сработало бы, если бы файл был файлом javascript (.js). Поскольку вы используете командный файл, вы должны использовать exit /B n
для выхода из командного файла, где n - код выхода. (Источник)
Я предпочитаю создать несколько иное и более простое решение:
@echo off
<fullpath>\VerifyWarehouseLoad.exe 2>&1 | Find /i "1"
IF [%ERRORLEVEL%] EQU [0] start "TitlePlaceholder" /wait /d "C:\Program Files\Sisense\Prism" psm ecube build name="Test" serverAddress="LocalHost" mode="restart"
Если не использовать () в команде, будет меньше проверок синтаксиса во время синтаксического анализа пакетного файла.
%ERRORLEVEL%
- это возвращаемое значение предыдущей команды, которое равно 0, когда команда find находит строку поиска.
2>&1
Возьмем стандартный вывод ошибок и объединим его в стандартный, чтобы разрешить |
для обработки всего вывода команды
Если VerifyWarehouseLoad.exe
использует возвращаемое значение вместо вывода статуса на экран, который вы можете напрямую проверить, пропустив команду поиска.
@echo off
<fullpath>\VerifyWarehouseLoad.exe
IF [%ERRORLEVEL%] EQU [0] start "TitlePlaceholder" /wait /d "C:\Program Files\Sisense\Prism" psm ecube build name="Test" serverAddress="LocalHost" mode="restart"
Спасибо всем, кто оставил предложения в комментариях.
Я пробовал одну модификацию за раз, и решение добавляло полный путь к VerifyWarehouseLoad.exe
Я также удаляю первую и последнюю строки, потому что они действительно не нужны. Окно консоли даже не отображается при запуске из планировщика задач.
Вот последний сценарий, который работает как вручную, так и через Планировщик заданий.
for /f %%i in ('C:\Temp\VerifyWarehouseLoad.exe') do set RESULT=%%i
IF %RESULT%==1 (
start /wait /d "C:\Program Files\Sisense\Prism" psm ecube build name="Answers Administrator" serverAddress="LocalHost" mode="restart"
)