如何在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 \”