附加到系統 PATH 變數而不包含使用者的 PATH 變量

附加到系統 PATH 變數而不包含使用者的 PATH 變量

想像以下環境變數:

系統路徑=C:\Windows
鮑伯的使用者路徑=C:\Users\Bob

在命令提示字元下PATH命令返回C:\Windows;C:\Users\Bob

運行後setx /m PATH "C:\Node;%PATH%"
系統路徑=C:\Node;C:\Windows;C:\Users\Bob

在新的命令提示字元中,PATH命令返回C:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob


另一位使用者Alice登入。使用者路徑=C:\Users\Alice

在命令提示字元下PATH命令返回C:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice

Bob 的變數中有重複的路徑PATH,Alice 的PATH變數中有 Bob 的路徑。

有沒有一種方法可以附加到系統PATH而不用當前用戶的污染它PATH

答案1

在 Windows 7 中,您可以使用下列命令來尋找系統路徑

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

如果這在 Windows 8 上仍然有效,請使用它來建立新值。

您必須弄清楚如何解析reg query.這是可能有用的東西:

for /f "tokens=1,2*" %a in (' reg query "HKLM\…\Environment" /v path ') 設定 currentValue=%c

在哪裡

  • 字串是用單引號括起來的指令(上面給)。'reg query "HKLM\…\Environment" /v path'reg query
  • acurrentValue、 和c是變數名。您可以選擇您想要的任何變數名稱,但限制是ac必須是單個字母,間隔兩個字母(例如,您可以使用nand p、或xand z)。
  •                             for /f "options" %variable in ('command1') do command2
    運行,解析輸出,將值分配給(s) (上面;但另見下面)並執行。command1%variable%acommand2
  • tokens=1,2*意味著%a取得每行(剩餘)行的第一個標記(單字), %b取得第二個單詞,然後%c取得該行的其餘部分。

    • 第一個單字是path(值名稱)。
    • 第二個字是REG_EXPAND_SZ(值類型)。
    • 該行的其餘部分是值。

    (你可以只使用tokens=2*然後currentValue=%b。)

因此,執行上述操作後,您應該能夠執行以下操作

setx PATH "C:\Node;%currentValue%" /m
  • 如果您在腳本(文件.BAT)中執行此操作,請使用%%a%%c
  • echo在使用 執行此操作之前,請務必使用命令對此進行測試setx

答案2

不要將 Bob 的特定路徑放入每個人都使用的系統路徑值中。

讀取系統路徑的舊值,修改它,然後設定新值。如果cmd.exe(顯然該set命令可以創建/修改/刪除但不能讀取)不提供這些功能,請將其放入批次檔呼叫的程式中。

系統路徑值是透過註冊表找到(並更改)的。我只是搜尋我知道的價值,它必須發現確切的位置,谷歌那個關鍵路徑來檢查關於它的內容。
(後來:他們是HKLM\System\CurrentControlSet\Control\Session Manager\EnvironmentHKCU\Environment

任何更高階的 Windows 腳本語言或具有 Windows API 支援的語言都可以處理該問題。或者,用您選擇的語言編譯的可執行程式。

CMD 替換外殼指揮有一個@REGQUERY函數:

echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]

因為聽起來您心中有一台特定的機器,所以您可以安裝TCC/LE(免費)並用它來解釋你的批次檔。

相關內容