我是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"