簡體   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