从批处理脚本返回值
Posted
技术标签:
【中文标题】从批处理脚本返回值【英文标题】:return value from batch script 【发布时间】:2013-05-24 06:03:43 【问题描述】:我正在从 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。
谁能帮帮我?
【问题讨论】:
它对我来说很好用。发布您的脚本。 @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=%%i == “!md5_2!” ( set md5_1= set md5_2= exit 0 ) else ( set md5_1= set md5_2= exit 1 ) endlocal 代码实际上是为两个文件生成校验和,如果相同则返回0,如果不同则返回1
您可以编辑您的问题以添加代码。另外,您需要使用exit /b <error code>
即使在错误条件下,我也将退出代码设为 0。如何获取退出代码 1?
我无法重现您的错误。对不起。
【参考方案1】:
批处理器 (cmd) 实际上会保留上次调用的错误级别。
要使用此功能,请不要在脚本末尾调用endlocal
,
这是called implicitly anywayMSDN
此外,请始终在脚本中使用exit /b
,因为正常的退出调用也会退出当前的批处理器实例
【讨论】:
【参考方案2】:您的两个命令看起来都有不匹配的引号,并且可能会因名称太长而失败。试试这个
当发出 setlocal 时,您不会使用延迟扩展并且将变量归零是没有意义的。
不需要Usebackq。
最后,使用 %%i 是不好的做法,因为它看起来很像 %%l 和 %%1 我知道,Microsoft 在示例中使用它。
@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
【讨论】:
以上是关于从批处理脚本返回值的主要内容,如果未能解决你的问题,请参考以下文章
使用批处理脚本从多个相同的 .txt 文件中复制某个值 [重复]