Я новичок в пакетном сценарии 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.
I ' m прочитал, что (0xff) является синтаксической ошибкой, но это не кажется правильным, если он отлично обрабатывается вне Планировщика заданий ...
Спасибо за любую помощь.
Спасибо всем, кто оставил предложения в комментариях.
Я пробовал одну модификацию за раз, и решение добавляло полный путь к 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"
)
Я выбрал решение, которое несколько отличается и более упрощено:
@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"