我不明白这个脚本的语法有什么问题:
@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
答案 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