在我的 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.exe
在C:\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%
。但是现在如果您执行MyProgram
,MyProgram.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