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 など) を好みますが、サードパーティのツールも使用しても問題ありません (やり過ぎのように思えますが)。

PPS: Windows GUI、レジスタ、またはサードパーティの 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")

この方法で行われた環境変数の変更はグローバルに利用できます。


CMDF

reg.exeレジストリ エントリを追加、変更、削除できます。環境変数はレジストリ内に存在します。この答えreg環境変数を削除するために使用する方法について説明します。

ユーザー環境変数の場合:

reg DELETE HKCU\Environment /v envvarname

システム環境変数の場合:

reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname

(HKCUは と互換性がありますHKEY_CURRENT_USERHKLMは と互換性がありますHKEY_LOCAL_MACHINE。)

(CMD空の環境変数は存在しない環境変数と同じように扱われることに注意してください。ただし、システムから変数を消去しようとしていることは理解しています。)

関連情報