这是第一个批处理文件:
@echo off
echo chaitu HI FROM ONE
这是第二个批处理文件:
@echo off
echo from harsha
call chaitu.bat
ECHO.%ERRORLEVEL%
ECHO AFTER VALUE
IF %ERRORLEVEL% NEQ 0 GOTO :failure
else
GOTO SUCCESS
:success
echo success
GOTO END
:failure
echo failure
GOTO END
:END
ECHO THIS IS THE END
我的问题是,如果我给出了正确的批处理文件名,那么它应该返回成功并显示成功,或者如果我给出的批处理名称不正确,它应该返回失败。
不清楚应该检查什么:
- 成功调用其他批处理文件,或
- 其他批处理文件中命令的结果
我举了两个例子。
检查其他批处理文件的调用
主批处理文件包含:
@echo off
call OtherBatchFile.bat 2>nul
if errorlevel 1 goto Failure
echo Other batch file was called successfully.
goto :EOF
:Failure
echo Other batch file could not be called.
另一个批处理文件包含:
echo Other batch file running ...
rem Do something ...
exit /B 0
检查其他批处理文件中命令的结果
主批处理文件包含:
@echo off
set "Result=none"
call OtherBatchFile.bat
if "%Result%"=="none" goto CallFailed
if "%Result%"=="fail" goto Failure
echo Other batch file executed the commands successfully.
goto :EOF
:Failure
echo Other batch file reported a failure on execution.
goto :EOF
:CallFailed
echo Other batch file could not be called.
goto :EOF
另一个批处理文件包含:
echo Other batch file running ...
if exist "%windir%notepad.exe" ( set "Result=success" ) else ( set "Result=fail" )
正如您所看到的,该解决方案还检查其他批处理文件的成功调用,因为其他批处理程序文件在任何情况下都被设计为修改环境变量Result的值。
在windows 2000及更高版本中,将其用作结束句
exit /B [exitCode]
在[exitCode]上输入要传递的所需错误级别。
请在这里查看有完整解释的地方。
%ERRORLEVEL%
(如您的代码中所示)只是一个环境变量(观察%chars),根据您使用的操作系统,它可能使用正确的exitCode设置,也可能不使用。但对于任何windows操作系统来说,这都是有效的:
IF ERRORLEVEL 255 GOTO Label255
IF ERRORLEVEL 254 GOTO Label254
.
.
.
IF ERRORLEVEL 2 GOTO Label2
IF ERRORLEVEL 1 GOTO Label1
请务必按降序进行检查。这是因为greater than
条件在IF ERRORLEVEL(也是该语法唯一允许的条件)上是默认的
另一方面,您可以在批处理设置和读取环境变量之间进行任何通信。在这种情况下,您必须小心,因为这是一个共享空间,因此两个正在执行的批处理可能会冲突,或者在不完整的批处理执行后可能会出现不一致的状态。因此,在被调用的批处理中,可以将任何变量设置为SET myvar=myvalue
。请不要使用SET errorlevel=以避免混淆和问题。
我不确定我是否完全理解您想要什么,但您应该尝试在第一个批处理文件的末尾添加以下内容:
cmd /c exit 0
如果成功执行,这将导致它将ERRORLEVEL设置为0。
另外,第二个批处理文件中的else语句也是无效语法-只需将其删除即可。