【发布时间】:2020-11-14 18:35:42
【问题描述】:
在 .bat 脚本中,我想在 PATH 用户变量中添加一个特定的目录列表。
最初,路径是这样的:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Novell\iPrint;C:\Program Files\WindowsPowerShell\Scripts\HP.ClientScriptLibrary;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\dotnet\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\myuser\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\Graphviz2.38\bin;
我使用这个命令:
setx WAC_PATH "c:\mydir1;c:\mydir2"
setx Path "%Path%;%%WAC_PATH%%"
我使用“%%”是因为我想将我的新目录分组到单个变量 (WAC_PATH) 中,并将其直接用于 PATH 变量中。
因此,WAC_PATH 已在用户环境变量中正确定义。但是,PATH 已更改:许多初始配置重复,我有几个 C:\WINDOWS 和 C:\WINDOWS/SYSTEM32
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Novell\iPrint;C:\Program Files\WindowsPowerShell\Scripts\HP.ClientScriptLibrary;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\dotnet\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Novell\iPrint;C:\Program Files\WindowsPowerShell\Scripts\HP.ClientScriptLibrary;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\dotnet\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\myuser\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\Graphviz2.38\bin;;C:\WINDOWS;C:\WINDOWS\System32;C:\WINDOWS;C:\WINDOWS\System32;C:\WINDOWS;C:\WINDOWS\System32;C:\WINDO
我认为变量 WAC_PATH 添加在 PATH 的末尾,但长度超过 1024。
为什么所有这些值都是重复的(我应该有初始路径值,最后只引用 WAC_PATH )?
【问题讨论】:
-
看起来很奇怪。您原来的
path设置似乎已解析为 ~508 个字符,并且在您的“之后”版本中没有明显出现c:\mydir1;c:\mydir2,这似乎重复了前 ~415 个字符并重复附加了;C:\WINDOWS;C:\WINDOWS\System32。我建议您使用regedit32阅读path和wac_path的实际定义,如果问题似乎无法解决,请编辑您的问题以包含这些实际定义。 -
您不应使用
setx.exe修改%Path%环境变量的值数据。原因在于,与其他变量不同,%Path%值的特殊之处在于它的值是 System%Path%变量值和 User%Path%变量值的内容。因此,您的命令将系统变量的所有内容添加到您的用户变量中,从而复制所有这些内容。 -
谢谢,我明白了。有没有办法更新bat脚本中的PATH变量(用户)?
-
见Why are other folder paths also added to system PATH with SetX and not only the specified folder path? 和Adding the current directory to Windows path permanently 和How to search and replace a string in environment variable PATH? 以及相反的How can I use a .bat file to remove specific tokens from the PATH environment variable?
-
嗯,你必须先修复你的用户
Path环境变量根据System cannot find path even though it exists in paths。注意:直接或通过不同的环境变量将一个或多个文件夹路径添加到 user 或 systemPath的唯一原因是批处理安装的应用程序或脚本文件主要由用户在命令提示符窗口中执行,只需输入其文件名。除了 Windows 默认设置之外,没有好的编码应用程序/脚本取决于Path中的哪些文件夹。
标签: batch-file path setx