Batch file 检查批处理文件中的命令是否成功

Batch file 检查批处理文件中的命令是否成功,batch-file,exit-code,errorlevel,Batch File,Exit Code,Errorlevel,如何在批处理文件中检查命令 start "" javaw -jar %~p0/example.jar 是成功还是产生了错误 我想使用if/else语句来回显此信息。您可以使用 if errorlevel 1 echo Unsuccessful 在某些情况下。这取决于返回正确退出代码的最后一个命令。如果程序正常返回,即使出现异常情况,也无法判断是否有任何错误 像Robocopy这样的程序需要更细致的方法,因为它返回的错误级别是一个位掩码,它包含的不仅仅是布尔信息,实际成功代码是,AFAIK,3

如何在批处理文件中检查命令

start "" javaw -jar %~p0/example.jar
是成功还是产生了错误

我想使用if/else语句来回显此信息。

您可以使用

if errorlevel 1 echo Unsuccessful
在某些情况下。这取决于返回正确退出代码的最后一个命令。如果程序正常返回,即使出现异常情况,也无法判断是否有任何错误


像Robocopy这样的程序需要更细致的方法,因为它返回的错误级别是一个位掩码,它包含的不仅仅是布尔信息,实际成功代码是,AFAIK,3。

我不知道javaw是否会写入%errorlevel%变量,但它可能会

echo%errorlevel%
直接运行后查看


除此之外,您可以通过管道将javaw的输出传输到一个文件,然后使用
find
查看结果。在不知道它的输出的情况下,我无法真正帮助您。

这可能不适用于
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
如果没有错误,则由

commandhere || echo what to do if error level ISN'T 0
commandhere && echo what to do if error level IS 0
如果它不返回错误级别,但给出了输出,您可以在变量中捕获它并通过输出进行确定,例如(注意,标记和delim只是示例,可能会因任何特殊字符而失败)

通过解析完整输出

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
语句中用
^
转义


希望这有帮助。

大多数命令/程序在成功时返回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"
呼叫
如果%ERRORLEVEL%==0转到:下一步
echo“执行过程中遇到错误。已退出,状态为:%errorlevel%”
转到:endofscript
:下一个
echo“做下一件事”
:endofscript
回显“脚本完成”

天哪,我很难找到这个问题的答案。。。这是:

cd thisDoesntExist
if %errorlevel% == 0 (
  echo Oh, I guess it does
  echo Huh.
)

这是正确的答案,因为它比检查
%errorlevel%
as更为明确。@TomášZato:它将在任何肯定的退出代码上触发。@sschuberth该链接现在已断开,更新的链接: