Ошибка пакетного файла при запуске из диспетчера задач

Я новичок в пакетном сценарии 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) является синтаксической ошибкой, но это не кажется правильным, если он отлично обрабатывается вне Планировщика заданий ...

Спасибо за любую помощь.

1
задан 19 May 2016 в 05:49
3 ответа

Спасибо всем, кто оставил предложения в комментариях.

Я пробовал одну модификацию за раз, и решение добавляло полный путь к 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"
)
0
ответ дан 3 December 2019 в 23:46
@end

Это сработает, если файл будет файлом javascript (.js ). Поскольку вы используете командный файл, вы должны использовать exit / B n для выхода из командного файла, где «n» - это код выхода. ( Источник )

1
ответ дан 3 December 2019 в 23:46

Я выбрал решение, которое несколько отличается и более упрощено:

@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"
0
ответ дан 3 December 2019 в 23:46

Теги

Похожие вопросы