Windows的echo命令无法输出用户设置的变量

31

我做了什么导致CMD命令行出了问题?我的电脑是Windows XP Pro,我打开了一个命令行窗口并输入:


"What did I do to screw up my CMD shell? Windows XP Pro, open a cmd window and do:"
C:\>set tt = name

C:\>set tt
tt = name

C:\>echo %tt%
%tt%

C:\>echo %time%
14:13:28.67

由于某种原因,echo命令无法正常工作。我可以很好地回显内置变量。在另一台计算机上尝试了一下,结果如预期。


1
小问题:%time% 不是环境变量,而是一个动态计算的伪变量。 - Joey
请注意,set tt能够显示变量的值的原因是set var会显示所有以var开头的变量。您可能会注意到系统输出中tt=之间有一个空格。此外,变量的值包括初始空格。例如,echo last%tt %将输出last name,这可能是所期望的结果。 - GlennFromIowa
3个回答

73

set 命令不能包含空格。正确的语法为:

set tt=name

你在示例中所做的是设置了一个名为tt<space>的环境变量。考虑到这一点,你可以尝试这样做:

What you have done in your example is set an environment variable tt<space>. With that in mind, you can try this:

echo %tt %

并查看您的输出。


10

这里最受欢迎的回答,早已被接受,声称:

"set命令不接受空格。"

但这是不正确的:实际上%tt %变量是有效的:它可以被设置和引用。(尽管它是困惑的)

问题重现:

确实,在我的Win7上:

C:\>set os
OS=Windows_NT

C:\>set tt = name
C:\>set tt2= name
C:\>set tt3=name
C:\>set tt
tt = name
tt2= name
tt3=name

我尝试并获得了:

C:\>echo "%os%"
"Windows_NT"

C:\>echo "%tt3%"
"name"
C:\>echo "%tt2%"
" name"
C:\>echo "%tt%"
"%tt%"

已解决的案例:

直观地期望的变量%tt%未设置。但是,%tt %却被设置了:

C:\>echo "%tt %"
" name"

更进一步,如果在值的末尾加上一个空格,set tt4 = name

C:\>echo "%tt4 %"
" name "

结论:

set 命令不会 trim()

  • = 前面的空格包括在 var_name 中。
  • = 后面的空格包括在 var_value 中。
  • var_value 结尾处的空格包括在其内。

另一方面:

  • var_name 开头的空格不会包括在其中,这在命令行参数中通常很正常。

欢迎来到 Stack Overflow,请参观一下,确保您阅读了如何撰写好的答案?,并更新您的答案以提供更多信息。 - lordrhodos
这只是已被接受的答案(七年前)的冗长重复。 - SiHa
我不同意这个问题已经被完全回答了:虽然有人说%tt%是错误的...但它确实可以使用。所以现在它被展示给大家了。 - Franta
3
被接受的答案展示了一个可行的备选语法;然而,最初的陈述“set命令不接受空格”是不正确的。尽管这个答案有点啰嗦,但它解释了关于set命令如何处理空格的细微差别。 - GlennFromIowa

6

您尝试过在等号之间不加空格设置变量吗?(set tt=name)



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接