使用批处理文件将值添加到系统PATH变量

5
我希望创建一个批处理文件,将当前目录添加到我的系统变量 PATH 中(而不是用户变量)。

当我使用以下命令时:

SETX /M PATH "%CD%;%PATH%"

它完成了所需的任务,但是我收到了一个错误信息:

保存的数据被截断为1024个字符。

当我使用GUI检查系统变量时,我发现用户路径(User Path)被添加到系统路径(System Path)中。因此,系统路径出现了重复条目。

我尝试将%PATH%变量分配给临时变量并回显,但我在那里看到了重复内容。

我在某些堆栈答案中看到,我们在批处理文件中使用的%PATH%变量实际上是用户路径和系统路径的连接。

在命令提示符下,我尝试了以下操作:

REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH"

不过我不确定我们是否可以将其用于获取 PATH 值并将其赋值给另一个变量。

  1. 因此,我需要找到一种方法,仅将系统 PATH 分配给一个临时变量,比如说 SYS_PATHS。怎么做呢?
  2. 有没有更好的方法来解决这个情况?

1
你可能不会相信,但是其他人也想使用批处理文件将文件夹路径添加到系统路径中。因此,可以在 Stack Overflow 上使用搜索功能找到很多解决方案,例如使用 [batch-file] system path add 进行搜索。有很多 不好的 解决方案会破坏 系统PATH,但也有一些非常好的解决方案。 - Mofi
使用注册表键,而不是其他方式! - Compo
请也看一下为什么会出现“X不是内部或外部命令,可执行的程序或批处理文件”?。看起来您不需要将当前目录路径添加到__system__ PATH中。您只需要将此文件夹路径添加到__local__ PATH中即可。这通常是不必要的,因为cmd.exe总是在使用__local__ PATH和__local__ PATHEXT之前首先在当前目录中搜索程序或脚本。 - Mofi
因此,将以下代码添加到批处理文件中就足够了:if "%PATH:~-1%" == ";" ( set "PATH=%PATH%%CD%" ) else ( set "PATH=%PATH%;%CD%" ),以将当前目录路径追加到本地 PATH 环境变量,此环境变量不会被持久化存储在 Windows 注册表中,仅由当前运行的命令进程和从该命令进程启动的所有应用程序使用。 - Mofi
显示剩余4条评论
1个回答

1

我在由@Mofi提供的链接中找到了我所提出的问题的答案。 这是如何仅获取系统路径并将目录附加到它的方法。

set "env=HKLM\System\CurrentControlSet\Control\Session Manager\Environment"

for /f "tokens=2*" %%I in (
     'reg query "%env%" /v Path ^| findstr /i "\<Path\>"'
) do setx /m PATH "%%J;%CD%"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接