3

我正在从 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。

有谁能够帮我?

4

2 回答 2

4

批处理器 (cmd) 实际上会保留上次调用的错误级别。要使用此功能,请不要endlocal在脚本末尾调用,无论如何都会隐式调用MSDN 此外,请始终使用exit /b内部脚本,因为正常的退出调用也会退出当前批处理器实例

于 2014-05-29T12:21:44.380 回答
0

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

当发出 setlocal 时,您不会使用延迟扩展并且将变量归零是没有意义的。

不需要 Usebackq。

最后,使用 %%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
于 2013-05-24T15:11:29.930 回答