批处理脚本返回值

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。 有人能帮助我吗?

它对我来说运行良好。请发布你的脚本。 - Anirudh Ramanathan
@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 - Tjs
您可以编辑您的问题以添加代码。此外,您需要使用 exit /b <错误代码> - Anirudh Ramanathan
即使条件为假,我也得到了退出代码为0。如何获得退出代码1? - Tjs
我无法重现你的错误。抱歉。 - Anirudh Ramanathan
在第二个循环后面添加echo %md5_1% # %md5_2%命令,并发布值。 - Endoro
2个回答

4

批处理器(cmd)实际上会保留最后一次调用的错误级别。 要使用此功能,请不要在脚本末尾调用 endlocal, 因为这个操作会被隐式执行,详见MSDN微软技术文献。 此外,在脚本中始终使用 exit /b,因为普通的退出调用也会退出当前的批处理器实例。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接