我是 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) 是一个语法错误,但如果它在任务计划程序之外处理正常的话,这似乎不正确......
谢谢你的帮助。
答案1
@end
如果文件是 javascript 文件 (.js),则此方法可行。由于您使用的是批处理文件,因此应使用exit /B n
退出批处理文件,其中“n”是退出代码。(来源)
答案2
感谢所有在评论中留下建议的人。
我尝试一次修改一个,解决方案是添加完整路径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"
)
答案3
我选择提出一个略有不同且更简单的解决方案:
@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%
是前一个命令的返回值,当 find 命令定位到搜索字符串时,该值为 0。
2>&1
将获取标准错误输出并将其加入到标准输出中,以允许|
处理命令的整个输出
如果VerifyWarehouseLoad.exe
使用返回值而不是将状态打印到屏幕上,您可以直接检查是否跳过 find 命令。
@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"