想像以下環境變數:
系統路徑=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
a
、currentValue
、 和c
是變數名。您可以選擇您想要的任何變數名稱,但限制是a
和c
必須是單個字母,間隔兩個字母(例如,您可以使用n
andp
、或x
andz
)。-
for /f "options" %variable in ('command1') do command2
運行,解析輸出,將值分配給(s) (上面;但另見下面)並執行。command1
%variable
%a
command2
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\Environment
和HKCU\Environment
)
任何更高階的 Windows 腳本語言或具有 Windows API 支援的語言都可以處理該問題。或者,用您選擇的語言編譯的可執行程式。
CMD 替換外殼指揮有一個@REGQUERY函數:
echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]
因為聽起來您心中有一台特定的機器,所以您可以安裝TCC/LE(免費)並用它來解釋你的批次檔。