如何在batch file中持久地设置Windows 7中的variables?

我试图在Windows 7中使用bat文件设置PATH环境variables; 但它似乎并没有工作。

我正在使用这个Windows命令:

set PATH=%cd%;%path% pause 

但是,它似乎只适用于此cmd实例。 我希望它是永久的,因为我第一次设置path,然后运行一个程序,需要find该文件夹​​中的库。

使用setx.exe而不是set。

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

请注意,这将为所有未来的cmd实例设置path,但不会为当前的cmd实例设置path。 如果你需要的话,也运行你原来的设置命令。

更新:第二个参数需要引用,如果它包含空格(%path%始终)。 要警告的是,如果%path%中的最后一个字符是反斜杠,它将会跳过尾部的引号,最后的path条目将停止工作。 我通过在收盘价之前附加分号来解决这个问题。

如果你不想冒险得到“;;;;;;” 在重复运行之后,在path的末尾,然后在设置之前,从%path%variables中去掉任何尾随的反斜杠,它将正常工作。

如果要在batch file中执行此操作,请使用reg命令在HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment项中更改registry中的path值。

就像是:

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

检查%path%variables中的path是否与系统path匹配。

正如wizlb所指出的那样

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

将本地env复制到系统env,而不需要-m它会将系统env复制到用户env。 两者都不可取。 为了准确地编辑registry的一部分(系统或用户,系统在我的下面的例子),你需要这样做:

 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 

信贷的解决scheme去http://www.robvanderwoude.com/ntregistry.php

为了做到这一点,我认为你真的需要超越一个简单的batch file。 MSDN文档指出:

要以编程方式添加或修改系统环境variables,请将它们添加到HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environmentregistry项中,然后广播一个WM_SETTINGCHANGE消息,并将lParam设置为string“Environment”。 这使应用程序(如shell)能够获取更新。

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

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

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

Batch-Script-To-Manage-7d0ef21e下的pathmgr_1.0.2.html

解压并将pathmgr.cmd放到与batch file相同的文件夹中,然后在batch file中写入以下两行:

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

这会:

1)只更新用户variablesPATH,2)不会包含系统PATH多次

您也可以多次运行该batch file,并且只会在PATH中包含您当前的path。

假设我想创build一个名为“ZIP_PROGRAM”的系统环境variables,并且我想将它指向path上的可执行文件“reg add C:\ Program Files \ 7-Zip \ 7z.exe

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

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

第二步:注销然后login

第三步:打开DOS提示符并执行:“set z”,你应该能够看到系统环境variables更新

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

反正它不会在当前会议中设置你需要使用

设置PATH =“%PATH%;%MVN_HOME%\ bin \”