从批处理脚本返回值

时间:2013-05-24 06:03:44

标签: batch-file exit-code

我从vbscript调用批处理脚本。

在批处理脚本中,根据条件我想返回自定义退出代码。

@echo off
setlocal ENABLEDELAYEDEXPANSION`
for /f "usebackq" %%i in (`"%1"\fciv.exe" -md5 %2"`) do set md5_1=%%i  
for /f "usebackq" %%i in (`"%1"\fciv.exe" -md5 %3"`) do set md5_2=%%i

if "!md5_1!" == "!md5_2!" (  
    set md5_1=  
    set md5_2=  
    exit 0  
) else (  
    set md5_1=  
    set md5_2=  
    exit 1  
)
endlocal  

对于这两个条件,我得到的值为0。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

批处理器(cmd)实际上将保留最后一次调用的错误级别。 要使用此功能,请不要在脚本末尾调用endlocal, 这是called implicitly anywayMSDN 此外,始终在脚本中使用exit /b,因为正常的退出调用也将退出当前的批处理器实例

答案 1 :(得分:0)

您的命令看起来都有不匹配的引号,并且可能会因长名称而失败。试试这个

您没有使用延迟扩展,并且在发布setlocal时将变量置零是没有意义的。

不需要使用Useback。

最后使用%% i是不好的做法,因为它看起来非常像%% l和%% 1 我知道微软在例子中使用它。

@echo off
setlocal
for /f %%a in ('"%~1\fciv.exe" -md5 "%~2"') do set md5_1=%%a  
for /f %%a in ('"%~1\fciv.exe" -md5 "%~3"') do set md5_2=%%a

if "%md5_1%"=="%md5_2%" (exit /b 0) else (exit /b 1 )
endlocal