命令提示符中是否有“&”字符的转义符?

deo*_*oll 11 windows batch command-line

我正在尝试类似的东西:

set pwd = abc&123
echo password %pwd%
Run Code Online (Sandbox Code Playgroud)

我得到的结果是...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc
Run Code Online (Sandbox Code Playgroud)

系统是这样的还是这样的角色有转义?

小智 9

您需要做的是将您的密码用双引号括起来,如下所示:

set pwd="abc&123"
echo %pwd%
Run Code Online (Sandbox Code Playgroud)

让我知道事情的后续。

  • @barlop:鉴于是解决问题的 *other* 行,我认为这并不重要。 (2认同)

mar*_*eau 7

从命令行参考帮助文件:

与号 (&)、竖线 (|) 和括号 ( ) 是特殊字符,当您将它们作为参数传递时,必须以转义字符 (^) 或引号开头。

如果其中有两个以上的字符需要处理,那么将整个密码放在引号中似乎比转义单个字符更容易。


BDM*_*BDM 7

我发现结合 martineau 的答案和 mastashake57 的答案效果最好。

set pwd=abc^&123
echo %pwd%
Run Code Online (Sandbox Code Playgroud)

仍然失败,并且

set pwd="abc&123"
echo %pwd%
Run Code Online (Sandbox Code Playgroud)

给它添加引号(你不能用for循环或字符串操作删除引号,因为它会再次失败,多亏了&符号),这不是很好。

然而,

set "pwd=abc^&123"
echo %pwd%
Run Code Online (Sandbox Code Playgroud)

完美运行。

希望有帮助。


Pac*_*ier 5

你真正需要的是:

set pwd=abc^^^&123
echo %pwd%
Run Code Online (Sandbox Code Playgroud)

或者:

set "pwd=abc^&123"
echo %pwd%
Run Code Online (Sandbox Code Playgroud)

解释:

由于&是一个特殊字符,因此必须使用 对其进行转义^,从而产生^&

运行set pwd=abc^&123会将变量设置为 value abc&123。之后,如果你要跑步echo %pwd%,你实际上就是在跑步echo abc&123

但它echo abc&123并不像你期望的那样工作,因为它&是一个特殊的字符。您可以通过添加引号来避免这种情况:echo "abc&123"但您的输出也会包含引号字符。换句话说,使用引号并不是一个正确的解决方案。

您需要的是&在运行echo命令时转义字符:

echo abc^&123
Run Code Online (Sandbox Code Playgroud)

所以变量需要包含值abc^&123。要将变量设置为值abc^&123,您需要转义特殊字符^&,结果是:

set pwd=abc^^^&123
Run Code Online (Sandbox Code Playgroud)