从任务pipe理器执行时batch file错误

我是Windows批处理脚本的新手,但是我能够得到我需要的东西。 它在手动执行时起作用,但当任务pipe理器执行脚本时,它不会完成。 最后一次运行结果是“(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的控制台应用程序(与batch file位于同一目录中,捕获输出,如果值为1,则运行IF块中的行。

我正在阅读的(0xff)是一个语法错误,但这似乎并不正确,如果它正在处理任务计划外罚款…

谢谢你的帮助。

 @end 

这将工作,如果该文件将JavaScript文件(.js)。 由于您使用的是batch file,因此您应该使用exit /B n退出batch file,其中“n”是退出代码。 ( 来源 )

感谢所有在评论中留下build议的人。

我一次尝试了一个修改,解决scheme是将完整path添加到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" ) 

我select制作一个有点不同而且更简单的解决scheme:

 @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" 

通过在命令周围不使用(),batch fileparsing过程中的语法检查就会减less。

%ERRORLEVEL%是当find命令findsearchstring时,上一个命令的返回值,它是0。

2>&1将采取标准的错误输出并将其join标准中以允许| 处理命令的整个输出

如果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"