在路径变量中转义“&”符号

在路径变量中转义“&”符号

在我的 PATH 环境变量中,有

C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5

这会搞乱整个 PATH --- 之后的条目不会被考虑,并且我的 shell 会做出奇怪的事情:

C:\Users\bowi>echo %PATH%
C:\other;C:\path;C:\entries;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5
Der Befehl "MySQL" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "MySQL" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

显然,&路径中的 是罪魁祸首,我该如何逃脱呢?

答案1

你不能这样做echo %path%并不意味着你的 PATH 有问题。PATH 环境变量的目的是提供一个文件夹列表,以便在你调用程序时不指定路径时搜索程序。

假设您已经MyProgram.exeC:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5文件夹中,那么执行MyProgram就会正确执行MyProgram.exe,不管您当前的目录是什么。

但事实上,如果你尝试这样做echo %path%,那么就会失败——而且也应该如此。

如果您将 PATH 中的值更改为C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 ^& MySQL Utilities 1.5,那么当然,您可以安全地echo %path%。但是现在如果您执行MyProgramMyProgram.exe则将找不到,因为 PATH 指向了错误的文件夹名称。

另一种可行的方法是修改 PATH 以读取"C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5"(引用值)。现在 PATH 可以正常工作,允许您MyProgram从任何地方执行,现在 可以 安全 了echo %path%

但您可能无法控制输入到 PATH 定义中的所有值。由于 PATH 的工作方式设计,它并非echo %path%在所有情况下都安全。事实上,%path%在任何命令中使用它都是不可靠的。

这可能就是为什么该path命令被设计为安全地打印出 PATH 环境变量的值而无需进行任何显式变量扩展的原因。

即使echo %path%失败,执行path也会打印出正确的完整定义。

另一个选项是启用延迟扩展并使用echo !path!。使用延迟扩展时,处理任何值都是安全的。

答案2

更新:不要这样做,它似乎有效,但会让路径指向错误的目录(参见 dbenham 的回答)!

我找到了!它是^,而且,最重要的是,它似乎只有在您单击环境变量概览窗口中的“确定”时才有效 —— 编辑变量并在编辑框中单击“确定”是不够的。

C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 ^& MySQL Utilities 1.5

相关内容