【发布时间】:2013-01-19 10:23:47
【问题描述】:
如何在批处理文件中检查 if 命令
start "" javaw -jar %~p0/example.jar
是成功还是产生了错误?
我想使用 if/else 语句来回显此信息。
【问题讨论】:
标签: batch-file exit-code errorlevel
如何在批处理文件中检查 if 命令
start "" javaw -jar %~p0/example.jar
是成功还是产生了错误?
我想使用 if/else 语句来回显此信息。
【问题讨论】:
标签: batch-file exit-code errorlevel
这可能不适用于start,因为这会打开一个新窗口,但要回答您的问题:
如果命令返回错误级别可以通过以下方式检查
按特定错误级别
commandhere
if %errorlevel%==131 echo do something
如有错误
commandhere || echo what to do if error level ISN'T 0
如果没有错误
commandhere && echo what to do if error level IS 0
如果它没有返回错误级别但确实给出了输出,您可以在变量中捕获它并通过输出来确定,例如(注意标记和分隔符只是示例,可能会因任何特殊字符而失败)
通过解析完整输出
for /f "tokens=* delims=" %%a in ('somecommand') do set output=%%a
if %output%==whateveritwouldsayinerror echo error
或者您可以在输出中查找单个短语,例如单词 Error
通过检查字符串
commandhere | find "Error" || echo There was no error!
commandhere | find "Error" && echo There was an error!
您甚至可以混合在一起(如果在 for 语句中,请记住将 | 和 ^| 转义)
希望这会有所帮助。
【讨论】:
你可以使用
if errorlevel 1 echo Unsuccessful
在某些情况下。这取决于最后一个返回正确退出代码的命令。如果你的程序正常返回,即使出现异常情况,你也无法判断有什么问题。
小心使用像 Robocopy 这样的程序,它需要更细微的方法,因为从中返回的错误级别是一个位掩码,其中包含的不仅仅是布尔信息,实际成功代码是 AFAIK,3。
【讨论】:
%errorlevel% 为 ERRORLEVEL is not %ERRORLEVEL% 更明确。
大多数命令/程序在成功时返回 0,而其他一些值(称为 errorlevel)表示错误。
您可以在批处理中检查这一点,例如:
call <THE_COMMAND_HERE>
if %ERRORLEVEL% == 0 goto :next
echo "Errors encountered during execution. Exited with status: %errorlevel%"
goto :endofscript
:next
echo "Doing the next thing"
:endofscript
echo "Script complete"
【讨论】:
天哪,我很难找到答案……这里是:
cd thisDoesntExist
if %errorlevel% == 0 (
echo Oh, I guess it does
echo Huh.
)
【讨论】:
我不知道 javaw 是否会写入 %errorlevel% 变量,但它可能会。
echo %errorlevel%之后你直接运行看看。
除此之外,您可以将 javaw 的输出通过管道传输到文件,然后使用 find 查看结果。在不知道它的输出的情况下,我真的无法帮助你。
【讨论】: