我从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。
任何人都可以帮助我吗?
答案 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