set var1=Demo
set var2=%var1%
echo %var2%
rem Output:Demo
set var2
如果与 一行,为什么下面不起作用set var1
?
set var1=& set var2=
set var1=Demo& set var2=%var1%
echo %var2%
rem output:%var1%
我怎样才能set var2
从var1
一条线上?
更新--- (04/04/2024)
Neil的简单代码
@echo off
set var1=Demo& call set var2=%%var1%%
echo %var2%& pause
DavidPostill延迟了
@echo off
setlocal enabledelayedexpansion
set var1=Demo& set var2=!var1!
echo %var2%& pause
两者都工作正常。
变量替换是在执行该行之前在整个命令行上完成的。此时,该
var1
变量尚未定义。未定义变量替换的规则是:
%var1%
您需要将这一行分成两行才能
var1
获得值。或者参见@DavidPostill 的回答。set var2
如果与 一条线,为什么不起作用set var1
?正如Harrymc指出的:
您可以使用延迟扩展来绕过此限制:
例子:
进一步阅读
您可以在不使用延迟扩展(没有“
setlocal enabledelayedexpansion
”)的情况下,通过使用带有“call”的“for”(循环)来完成此操作。输出:
您甚至可以添加第二个“for”循环来在同一行中执行“echo var2”:
“最终”输出:
以下是“for”和“call”的细分: