我想将批处理文件的状态从一个批处理文件返回到另一个批文件.如果它被执行,它应该返回success else failur



这是第一个批处理文件:

@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语句也是无效语法-只需将其删除即可。

相关内容

最新更新