繁体   English   中英

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

[英]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

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

要正确执行此操作,我认为您确实需要 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM