【问题标题】: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?
  • 我无法重现您的错误。对不起。

标签: batch-file exit-code


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2011-06-15
      相关资源
      最近更新 更多