Windows 命令解释器允许您在整个 set 命令周围使用引号(在从 NT 4.0 到 Windows 2012 R2 的每个 Windows NT 版本中都有效)
你的脚本应该写成如下:
@echo OFF
set "myvar=C:\my music & videos"
然后您可以根据需要在变量周围加上引号。
使用 CMD 提示符有时看起来很深奥,但命令解释器实际上在遵守其内部逻辑方面表现得非常可靠,您只需要重新考虑即可。
事实上,set 命令根本不需要你使用引号,但是你进行变量赋值的方式和不使用引号的 , 方法都会导致你的变量周围有额外的空格,这调试脚本时很难注意到。
例如以下两个在技术上都是有效的,但你可以有尾随空格,所以这不是一个好习惯:
set myvar=some text
set myvar="some text"
例如以下两种方法都是在 Windows 命令解释器中设置变量的好方法,但双引号方法更胜一筹:
set "myvar=Some text"
(set myvar=Some value)
这两者都没有解释变量将完全具有您正在寻找的数据。
强文本但是,出于您的目的,只有带引号的方法才有效,因为您使用的是保留字符
因此,您将使用:
set "myvar=c:\my music & videos"
然而,即使变量被正确设置为这个字符串,当你 ECHO 字符串时,命令解释器会将 & 符号解释为关键字,以指示后面有另一个语句。
所以,如果你想从变量中回显字符串,CMD 解释器仍然需要被告知它是一个文本字符串,或者如果你不希望引号显示你必须执行以下操作之一:
用引号回显变量:
Echo."%myvar%"
在没有引号的情况下回显变量:
Echo.%myvar:&=^&%
<nul SET /P="%myvar%"
在上述两种情况下,您可以回显不带引号的字符串。下面的示例输出:
C:\Admin> Echo.%myvar:&=^&%
C:\my music & videos
C:\Admin> <nul SET /P="%myvar%"
C:\my music & videos
C:\Admin>