我一直在使用以下命令來設定/刪除使用者/系統環境變數:
系統:
setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"
用戶:
setx VAR1 "CONTENT OF VAR1"
後來我發現了這些限制:
- 如果
%PATH%
太長,則會收到以下警告,並且%PATH%
變數將被截斷:
警告:保存的資料被截斷為 1024 個字元。
- 正如命令的幫助
setx
所述:
使用 Setx.exe 清除環境變數值時,環境變數名稱不受影響
換句話說,當我運行時,setx -m OCVLIBDIR ""
不會OCVLIBDIR
被刪除而是空的。
我怎樣才能克服這些限制?
PS:我更喜歡 Windows 10 中的工具(例如 PowerShell),但使用第 3 方工具也沒有問題(儘管在我看來有點矯枉過正)。
PPS:我知道可以透過 Windows GUI、暫存器或某些第 3 方 GUI 工具編輯變量,但我更喜歡腳本,因為我可以編寫多個場景並在它們之間快速切換。各種版本的opencv等)。
答案1
電源外殼
這篇 TechNet 文章描述了基礎知識。
這個答案描述了獲取系統與使用者環境變數(這僅在第一篇文章中暗示)。"Machine"
對於系統,"User"
對於當前用戶,以及"Process"
用於獲取最終系統/用戶組合的當前進程。
PowerShell 連線在這個問題及其答案。您可以使用+
連接或使用替換來組裝字串,如 中所示"{0} {1}" -f "Hello","World"
。
括號用於將構造分組在一起。
變數是非類型化、未聲明的,並且以$
.
將它們放在一起會得到類似的結果:
$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")
或作為一句單行:
[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")
本文描述如何刪除環境變數($null
是一個特殊的變數):
[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")
透過這種方式對環境變數所做的更改是全域可用的。
指令管理系統
reg.exe
可以新增、變更和刪除註冊表項。環境變數位於註冊表中。這個答案談論使用reg
刪除環境變數。
對於使用者環境變數:
reg DELETE HKCU\Environment /v envvarname
對於系統環境變數:
reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname
(HKCU
可與HKEY_CURRENT_USER
.HKLM
互換HKEY_LOCAL_MACHINE
。)
(請注意,CMD
將空環境變數視為與不存在的環境變數相同。不過,我知道您正在嘗試從系統中清除該變數。)