我正在开发一个 Windows 程序,该程序将值添加到 PATH 环境变量中。PATH 变量以分号 ( ;
) 分隔,可以包含任何有效的文件夹路径。但是,;
在文件夹路径中有效,因此在将包含分号的路径添加到路径时必须用双引号括起来:
C:\Program Files (x86);"C:\;My Folder";C:\Program Files
为了避免分号问题,我的程序将所有路径括在双引号中。但是,最近有人告诉我, Powershell 无法处理 PATH 变量中的引号值,因为它将引号视为普通字符:
我查看了 PowerShell 如何处理 Path 变量(基于此代码:PowerShell/PowerShell@16176ef/src/System.Management.Automation/engine/CommandDiscovery.cs#L1187-L1240)。据我所知,PowerShell 不会删除双引号 - 它只是在看到分号的地方拆分路径。
因此,PATH 值C:\Program Files (x86);"C:\;My Folder";C:\Program Files
被错误地解释为如下形式(如果我正确理解了发生了什么的话):
C:\Program Files (x86)
"C:\
My Folder"
C:\Program Files
以下视频演示了该行为(该行为仅发生在 Powershell 中,不发生在 cmd 中): https: //www.mediafire.com/file/aih2ky9fz07x5w0/powershellpathwithsemicolonsbug.mp4/file
我的程序处理这个问题的最佳方法是什么?而且,更紧迫的是,为什么 Powershell 不能处理带有引号的 PATH 值(即使 CMD 可以)?使用手动方式编辑路径值以包含分号 - Edit the system environment variables -> Path -> Edit
- 会导致 Windows 自动将所需路径括在引号中,从而破坏 Powershell。所以这不是我的程序或情况的问题 - 这是 Powershell 处理 PATH 方式的固有问题。
Powershell 中的这种行为是故意的吗?有没有解决方法,或者我必须妥协,要么 A. 将包含分号的路径括在引号中并允许这种错误行为发生,要么 B. 不允许在 PATH 中使用分号?