我有一个问题,set没有在批处理文件中工作; 提出问题需要一段时间; 起初我以为这与子程序调用有关...
剧本
@echo off
setlocal
set a=aaa
echo a = "%a%"
(
set b=bbb
echo b = "%b%"
)
产生输出
a = "aaa"
b = ""
而我期待
a = "aaa"
b = "bbb"
为什么这样好?这是DOS中的错误吗?也许有一些(...)我不知道的命令分组语法.
谢谢.
And*_*ris 10
用户延迟扩展和!代替 %
@echo off
setlocal enableextensions enabledelayedexpansion
set a=aaa
echo a = "%a%"
(
set b=bbb
echo b = "!b!"
)
发生的事情是批处理解释器将括号中的所有内容都放在一行中.这意味着它在任何命令运行之前对括号中的所有内容进行变量替换.
所以:
(
set b=bbb
echo b = "%b%"
)
变为:
(
set b=bbb
echo b = ""
)
变量b正在设置但显然未在运行SET命令之前设置.
您需要延迟扩展,否则批处理解释器将在解析时插入所有变量,而不是运行时.
setlocal enableextensions enabledelayedexpansion
请参阅此问题以获取示例并对其进行一些很好的解释.