如何在批处理文件中持久设置Windows 7中的变量?

时间:2011-06-29 16:25:05

标签: windows path batch-file environment-variables

我正在尝试使用bat文件在Windows 7中设置PATH环境变量;但它似乎不起作用。

我正在使用这个Windows命令:

set PATH=%cd%;%path%
pause

但是它似乎只对此cmd实例有效。我希望它是永久性的,因为我首先设置PATH,然后运行一个需要在该文件夹中找到库的程序。

7 个答案:

答案 0 :(得分:64)

使用setx.exe而不是set。

setx PATH "%cd%;%path%;"
pause

请注意,这会为所有将来的cmd实例设置路径,但不为设置当前cmd实例的路径。如果需要,还可以运行原始的set命令。

更新:如果第二个参数包含空格(%path%总是有),则需要引用它。请注意,如果%path%中的最后一个字符是反斜杠,它将转义尾随引号,最后一个路径条目将停止工作。我通过在结束报价之前附加分号来解决这个问题。

如果你不想冒险获得“;;;;;;”在重复运行后的路径末尾,然后在设置之前从%path%变量中删除任何尾部反斜杠,它将正常工作。

答案 1 :(得分:22)

如果要在批处理文件中执行此操作,请使用 reg 命令在HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment键中更改注册表中的路径值。 / p>

类似的东西:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath"

检查%path%变量中的路径是否与系统路径匹配。

答案 2 :(得分:17)

正如wizlb所说,做

setx PATH "%cd%;%path%;" -m

将本地环境复制到系统环境,没有-m它会将系统环境复制到用户环境。两者都不可取。为了准确编辑注册表的一部分(系统或用户,以下示例中的系统),您需要这样做:

for /F "tokens=2* delims= " %%f IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx.exe PATH "%OLD_SYSTEM_PATH%;%OTHER_STUFF%;" -m

解决方案的归功于http://www.robvanderwoude.com/ntregistry.php

答案 3 :(得分:12)

为了做到这一点,我认为你真的需要超越一个简单的批处理文件。 MSDN documentation州:

  

以编程方式添加或修改系统环境变量,将它们添加到 HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment 注册表项,然后使用WM_SETTINGCHANGE消息> lParam 设置为字符串“Environment”。这允许应用程序(如shell)获取更新。

首先,如果没有UAC提升提示,您将无法写入该密钥。最好通过向可执行文件添加适当的清单来安排。其次,广播WM_SETTINGCHANGE在批处理文件中并不简单。

在你的位置上,我会编写一个简短的控制台应用程序来完成这项工作。

答案 4 :(得分:4)

一个简单的(可能更好)解决方案是使用PathMgr.cmd

关闭https://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

中的pathmgr_1.0.2.zip

解压缩并将pathmgr.cmd放在与批处理文件相同的文件夹中,然后在批处理文件中写下以下两行:

call pathmgr.cmd /del %cd% /y
call pathmgr.cmd /add %cd% /y

这将:

1)只更新用户变量PATH, 2)多次不包括系统PATH

您也可以多次运行批处理文件,它只会在PATH中包含您当前的路径ONCE。

答案 5 :(得分:0)

假设我想创建一个名为“ZIP_PROGRAM”的系统环境变量,我想将其指向路径“reg add C:\ Program Files \ 7-Zip \ 7z.exe

的可执行文件

我将在DOS提示符下执行以下操作:

Step1:执行以下代码 reg添加“HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment”/ v ZIP_PROGRAM / t REG_SZ / d“C:\ Program Files \ 7-Zip \ 7z.exe”/ f

步骤2:注销然后登录

步骤3:打开DOS提示符并执行:“set z”,您应该能够看到系统环境变量更新

答案 6 :(得分:0)

使用此命令 setx PATH"%PATH%;%MVN_HOME%\ bin \"

无论如何,它不会在你需要使用的当前会话中设置

设置PATH ="%PATH%;%MVN_HOME%\ bin \"