在 Windows 10 中透過命令列操作使用者和系統環境變量

在 Windows 10 中透過命令列操作使用者和系統環境變量

我一直在使用以下命令來設定/刪除使用者/系統環境變數:

系統:

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"

後來我發現了這些限制:

  1. 如果%PATH%太長,則會收到以下警告,並且%PATH%變數將被截斷:

警告:保存的資料被截斷為 1024 個字元。

  1. 正如命令的幫助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將空環境變數視為與不存在的環境變數相同。不過,我知道您正在嘗試從系統中清除該變數。)

相關內容