[英]Command executed from else block in Windows batch script returning wrong errorlevel
我是批处理脚本的新手,虽然在Windows 7 pc中摆弄简单的脚本,但仍坚持以下几点-
command1
echo %errorlevel%
if %errorlevel% neq 0 (
echo -- Error occured during command1 execution ---
goto :eof
) else (
echo -- command1 execution was successful ---
command2
echo %errorlevel%
if %errorlevel% neq 0 (
echo -- Error occured during command2 execution ---
goto :eof
)
)
在这里,命令1执行成功(单独检查),并且返回错误级别0(成功),而命令2执行失败(单独检查),而不是不为零(失败),返回错误级别为0。但是当我删除else条件时,命令2执行返回1(失败)。 好奇地知道原因。
如建议的那样,现在我开始使用!errorlevel声明setlocal enabledelayedexpansion而不是%errorlevel%! 并给出成功/失败所需的错误级别。
但是现在我面临另一个问题。 我正在调用另一个命令(假设用command3代替command2)。 它依次调用我的java类之一,该类抛出java.lang.StringIndexOutOfBoundsException。 但是在我的.bat文件中,它返回的错误级别为0,而不是1,而command3失败了(单独检查)。 以下是我最新的脚本-
@echo off
setlocal enabledelayedexpansion
command1
echo call !errorlevel!
if !errorlevel! neq 0 (
echo -- Error occured during command1 execution ---
goto :eof
)
echo -- command1 execution was successful ---
REM command3
java MyclassName > logfilename.log 2>&1
echo call !errorlevel!
if !errorlevel! neq 0 (
echo -- Error occured during command3 execution ---
goto :eof
)
echo --- command3 Executoin was successful---
如何强制!错误级别! 在出现某些异常失败时返回正确的值。 请帮忙。
您需要调用delayedexpansion [关于它的数百篇SO文章-使用搜索功能],以显示括号内的一系列指令(也称为“代码块”)中已更改的任何变量的运行时值。
使用当前代码,如果要显示 command2
返回的实际错误,请使用
CALL echo %%errorlevel%%
如果要在错误errorlevel
的运行时值上执行if
,则使用
if errorlevel 1 (
IF ERRORLEVEL n
如果errorlevel
为n 或大于 IF ERRORLEVEL n
则IF ERRORLEVEL n
为TRUE。 IF ERRORLEVEL 0
因此始终为true。 IF NOT ERRORLEVEL 1
是对errorlevel = 0的测试。
试试这个修改后的代码版本,让我们实际使用if
和else
@echo off
setlocal enabledelayedexpansion
command1 2>&1
echo !errorlevel!
if !errorlevel! neq 0 (
echo -- Error occured during command1 execution ---
) else (
echo -- command1 execution was successful ---
command3 2>&1
echo !errorlevel!
if !errorlevel! neq 0 (
echo -- Error occured during command3 execution ---
) else (
echo --- command3 Execution was successful---
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.