[目的]
这个简单的命令序列按预期在 Windows 的 CMD shell 中运行:
dir & echo hello
将列出文件和目录并回显字符串。
但是,以下命令序列没有按预期运行(至少对我而言):
C:\Users\Administrator>set name=value & echo %name%
%name%
C:\Users\Administrator>echo %name%
value
C:\Users\Administrator>
可以看到,第一个echo是获取不到环境的。能帮忙评论一下吗?任何意见将不胜感激!
附言:操作系统:Windows 7 X64 家庭版
最佳答案
您的结果是由于 %name% 在解析阶段被扩展,并且在设置值之前立即解析整行。
您可以通过以下两种方式之一在与 set 命令相同的行上获取当前值。
1) 使用 CALL 使 ECHO %NAME% 被第二次解析:
set name=value&call echo %^name%
我在百分比之间放了一个 ^
以防万一在执行该行之前已经定义了名称。如果没有插入符号,您将获得旧值。
注意:您的原始行在 &
之前有一个空格,这个空格将包含在变量的值中。您可以使用引号防止多余的空格:set "name=value"&...
2) 使用延迟扩展在执行时而不是在解析时获取值。默认情况下,大多数环境都没有启用延迟扩展。您可以使用适当的 CMD.EXE 选项在命令行上启用延迟扩展。
cmd /v:on
set "name=value" & echo !name!
延迟扩展当然可以在命令行上使用,但它更常用于批处理文件中。 SETLOCAL 用于在批处理文件中启用延迟扩展(它在命令行中不起作用)
setlocal enableDelayedExpansion
set "name=value" & echo !name!
关于windows - 在一个 windows cmd 行中运行两个命令,一个命令是 SET 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888806/