批处理文件中的块代码

时间:2014-10-03 09:37:00

标签: batch-file command

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

@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

1 个答案:

答案 0 :(得分:2)

执行批处理文件时,将解析,执行行/块,并在下一行/块中继续处理。当解析器到达一行或一段代码时,所有%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