Batch file 批处理脚本的返回值

Batch file 批处理脚本的返回值,batch-file,exit-code,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!" == "!

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


有人能帮我吗?

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

您没有使用延迟扩展,当发出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
批处理程序(cmd)将实际保留上次调用的errorlevel。 要使用此功能,请不要在脚本末尾调用
endlocal
, 这是
此外,始终在脚本内部使用
exit/b
,因为正常的exit调用也将退出当前的批处理程序实例

,这对我来说很好。发布您的脚本。@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”
)如果“!md5_1!”==“!md5_2!”(set md5_1=set md5_2=退出0)则设置md5_2=%iendlocal代码实际上为两个文件生成校验和,如果它们相同,则返回0;如果它们不同,则返回1。您可以编辑问题以添加代码。此外,您需要使用
exit/b
即使对于错误的情况,我也会将退出代码设置为0。如何获取退出代码1?我无法重现您的错误。很抱歉