27

我做了什么来搞砸我的 CMD 外壳?Windows XP Pro,打开一个 cmd 窗口并执行以下操作:

C:\>set tt = name

C:\>set tt
tt = name

C:\>echo %tt%
%tt%

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

echo 命令由于某种原因不起作用。我可以很好地回显内置变量。在另一台电脑上试了一下,效果如预期

4

3 回答 3

63

set命令不占用空格。正确的语法是:

set tt=name

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

echo %tt%

并查看您的输出。

于 2009-12-10T21:18:10.007 回答
9

这里最受好评的答案,很久以前就接受了,声称:

“该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不包括在内,这对于一般的命令行参数来说是很正常的。
于 2017-06-15T07:29:10.377 回答
5

您是否尝试过设置等号之间没有空格的变量?(设置 tt=名称)

于 2009-12-10T21:20:57.347 回答