Windowsで環境変数を設定するとき、コマンドプロンプトで使える set と setx の使い方で迷いましたのでメモとなります。
結論から言うと、今開いているコマンドプロンプトでだけ使いたい場合はset、次回以降も使えるように保存したい場合は setx を使います。
環境変数とは
環境変数とは、OSやアプリケーションが参照できる「名前」と「値」の組み合わせです。たとえば、実行ファイルの場所を示す PATH などがあります。
アプリケーションの設定をソースコードに直接書かず、環境変数から読み込むようにするkとで、開発環境・テスト環境・本番環境で値を切り替えやすくなります。
setとsetxの違い
| 項目 | set | setx |
|---|---|---|
| 設定の適用範囲 | 今開いているコマンドプロンプトのみ | 次回以降に開くコマンドプロンプトやアプリ(今起動中のプロセスでは有効にならない!) |
| 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 などは再起動すれば設定が反映される)

コメント