[Windows] set と setx の違い|環境変数を一時的・永続的に設定する方法

cmd

Windowsで環境変数を設定するとき、コマンドプロンプトで使える set setx の使い方で迷いましたのでメモとなります。

結論から言うと、今開いているコマンドプロンプトでだけ使いたい場合はset次回以降も使えるように保存したい場合は setx を使います。

環境変数とは

環境変数とは、OSやアプリケーションが参照できる「名前」と「値」の組み合わせです。たとえば、実行ファイルの場所を示PATH などがあります。

アプリケーションの設定をソースコードに直接書かず、環境変数から読み込むようにするkとで、開発環境・テスト環境・本番環境で値を切り替えやすくなります。

setとsetxの違い

項目setsetx
設定の適用範囲今開いているコマンドプロンプトのみ次回以降に開くコマンドプロンプトやアプリ(今起動中のプロセスでは有効にならない!)
PC 再起動後設定は消える設定は残る
主な用途一時的な動作確認、バッチファイル内の設定ツールなどで永続的に使う設定

使い方

set

set は以下の構文で使用できます。

set "APP_SETTING=development"

また、set のみ実行すれば、現在設定されている環境変数の一覧を確認できます。

setx

setx は以下の構文で使用できます。

setx APP_SETTING development

これでユーザー環境変数として設定できます。

もし、PC の全ユーザーを対象に設定したい場合は、/m を付けます。管理者としてコマンドプロンプトを起動してから実行します。

setx /m APP_SETTING development

※PATH を setx で設定する場合の注意点

PATH 環境変数はよく利用すると思いますので、PC の初期セットアップなどの際に、バッチ処理で設定したくなる場面があるかもしれません。その際の注意点として setx には設定できる値が 1024 文字までという制限があります。長い PATH を setx で更新すると、値が途中で切り捨てられ、予期せぬ動作が起きてしまうことがあります。(ありました)

まとめ

  • 今開いているコマンドプロンプトだけで使うならset
  • 次回以降も使えるように保存するならsetx
  • setxの設定は、現在起動中のプロセスには反映されない(VisualStudio などは再起動すれば設定が反映される)

コメント

タイトルとURLをコピーしました