[英]How to persistently set a variable in Windows 7 from a batch file?
我正在尝试使用 bat 文件在 windows 7 中设置 PATH 环境变量; 但是它似乎不起作用。
我正在使用这个 windows 命令:
set PATH=%cd%;%path%
pause
然而,它似乎只对这个 cmd 实例有效。 我希望它是永久性的,因为我首先设置了 PATH,然后运行了一个需要在该文件夹中找到库的程序。
使用 setx.exe 而不是 set。
setx PATH "%cd%;%path%;"
pause
请注意,这会为所有未来的 cmd 实例设置路径,但不会为当前实例设置路径。 如果你需要,也运行你原来的 set 命令。
更新:如果第二个参数包含空格(%path% 总是有),则需要引用它。 请注意,如果 %path% 中的最后一个字符是反斜杠,它将转义尾随引号,并且最后一个路径条目将停止工作。 我通过在结束引号前附加一个分号来解决这个问题。
如果您不想冒险获得“;;;;;;” 在重复运行后的路径末尾,然后在设置之前从 %path% 变量中删除任何尾随反斜杠,它将正常工作。
如果要在批处理文件中执行此操作,请使用reg命令更改注册表中 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 项的路径值。
就像是:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath"
检查 %path% 变量中的路径是否与系统路径匹配。
正如 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
要正确执行此操作,我认为您确实需要 go 超越简单的批处理文件。 MSDN 文档指出:
要以编程方式添加或修改系统环境变量,请将它们添加到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment注册表项,然后广播
WM_SETTINGCHANGE
消息,并将lParam设置为字符串“Environment”。 这允许应用程序(例如 shell)获取您的更新。
首先,如果没有 UAC 提升提示,您将无法写入该密钥。 最好通过将适当的清单添加到可执行文件来安排。 其次,从批处理文件中广播WM_SETTINGCHANGE
并不简单。
在您的 position 中,我会编写一个简短的控制台应用程序来完成这项工作。
一个简单(可能更好)的解决方案是使用 PathMgr.cmd
在https://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e 中的路径mgr_1.0.2.zip
解压缩并将 pathmgr.cmd 放在与批处理文件相同的文件夹中,然后在批处理文件中写入以下两行:
call pathmgr.cmd /del %cd% /y
call pathmgr.cmd /add %cd% /y
这将:
1) 只更新用户变量 PATH,2) 不会多次包含系统 PATH
您还可以多次运行批处理文件,它只会在 PATH 中包含您当前的路径一次。
假设我想创建一个名为“ZIP_PROGRAM”的系统环境变量,并且我想将其指向路径“reg add C:\Program Files\7-Zip\7z.exe”的可执行文件
我将在 DOS 提示符处执行以下操作:
Step1: 执行以下代码 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v ZIP_PROGRAM /t REG_SZ /d "C:\Program Files\7-Zip\7z.exe" /f
步骤2:注销然后登录
Step3:打开DOS Prompt并执行:“set z”,你应该可以看到系统环境变量更新了
使用此命令setx PATH "%PATH%;%MVN_HOME%\bin\"
无论如何,它不会设置在您需要使用的当前 session
设置 PATH="%PATH%;%MVN_HOME%\bin\"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.