如何在批处理文件中检查命令是否存在
start "" javaw -jar %~p0/example.jar
执行成功还是产生了错误?
我想使用if/else语句将这些信息输出。
如何在批处理文件中检查命令是否存在
start "" javaw -jar %~p0/example.jar
执行成功还是产生了错误?
我想使用if/else语句将这些信息输出。
很可能这不能与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这样的程序需要更加细致的方法,因为从中返回的错误级别是一个包含不止布尔信息的位掩码,而实际的成功代码是3(据我所知)。
errorlevel
是有符号的,并且exit /b -1
不会导致errorlevel
变为255(就像在DOS时代一样),而是-1。无论如何,这个答案的重点是使用errorlevel
而不是%errorlevel%
,比较只是我的一个例子。 - sschuberth大多数命令/程序在成功时返回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
查看结果。如果不知道输出内容,我无法提供更多帮助。
所以从逻辑上讲,这将测试成功:
if not errorlevel 1 echo success
嗯,除非有负的退出代码,这是不寻常的。这也有一个额外的好处,可以看到错误级别是什么。
if %errorlevel%==0 echo success