【问题标题】:block code in batch file批处理文件中的块代码
【发布时间】:2014-11-28 08:59:20
【问题描述】:

我不明白这个脚本的语法有什么问题:

@echo off
set a=1
set b=2
cd d:\
if %a% equ 1 (
  set a=%b%
  set b=5
  echo in a: %a%
  echo in b: %b%
  )
echo out a: %a%
echo out b: %b%
pause
exit /b

我得到这个结果:

in a: 1
in b: 2
out a: 2
out a: 5

我想得到以下结果:

in a: 2  
in b: 5
out a: 2
out a: 5

【问题讨论】:

    标签: batch-file command


    【解决方案1】:

    当一个批处理文件被执行时,行/块被解析、执行,并且该过程在下一行/块中继续。当解析器到达一行或代码块时,所有%variable% 引用都将替换为变量在开始执行代码之前 内的值。因此,如果您在代码块内更改变量的值,则无法从同一代码块内访问该新值:对变量的读取操作不存在,而是被变量内的值替换。

    您需要启用延迟扩展,并在需要时将访问变量中值的语法从%var% 更改为!var!。这向解析器指示读取操作应该延迟到执行读取操作为止。

    @echo off
        setlocal enabledelayedexpansion
        set a=1
        set b=2
        cd d:\
        if %a% equ 1 (
          set a=%b%
          set b=5
          echo in a: !a!
          echo in b: !b!
          )
        echo out a: %a%
        echo out b: %b%
        pause
        exit /b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多