从任务管理器执行批处理文件时出现错误

从任务管理器执行批处理文件时出现错误

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

相关内容