さまざまなWindowsマシンで環境変数を設定する必要がありますが、「マイコンピュータ」のプロパティ画面を表示して手動で環境変数を変更したくありません。
コマンドラインから、バッチファイルを使用して実行します。私が理解している限り、setを使用しても、コマンドウィンドウで呼び出すプロセスの変数のみが変更されます。
間違いなく設定したいので、後で新しいプロセスを実行すると、設定した新しい設定が使用されます。コマンドラインからそれを行う方法はありますか?
さまざまなWindowsマシンで環境変数を設定する必要がありますが、「マイコンピュータ」のプロパティ画面を表示して手動で環境変数を変更したくありません。
コマンドラインから、バッチファイルを使用して実行します。私が理解している限り、setを使用しても、コマンドウィンドウで呼び出すプロセスの変数のみが変更されます。
間違いなく設定したいので、後で新しいプロセスを実行すると、設定した新しい設定が使用されます。コマンドラインからそれを行う方法はありますか?
回答:
SETXコマンド(「x」サフィックスに注意)を使用して、cmdウィンドウが閉じられた後も持続する変数を設定します。
たとえば、env変数「foo」に「bar」の値を設定するには、次のようにします。
setx foo bar
setx /?
特に、使用法()を印刷した場合に表示される「注意事項」を読むことは価値があります。
2)ローカルシステムでは、このツールによって作成または変更された変数は、将来のコマンドウィンドウで使用できますが、現在のCMD.exeコマンドウィンドウでは使用できません。
3)リモートシステムでは、このツールによって作成または変更された変数は、次のログオンセッションで使用できます。
PowerShellでは、[Environment] :: SetEnvironmentVariableコマンド。
[Environment]::SetEnvironmentVariable('PATH', "Whatever you need it to be", "Machine")
では、次のことができます。msdn.microsoft.com
環境変数のMSDNのドキュメントには何をすべきかを説明します:
プログラムでシステム環境変数を追加または変更するには、それらをHKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environmentレジストリキーに追加してから、lParamが文字列 "Environment"に設定されたWM_SETTINGCHANGEメッセージをブロードキャストします。これにより、シェルなどのアプリケーションが更新を取得できます。
もちろん、これを行うには管理者権限が必要です。私はWindowsバッチからWindowsメッセージをブロードキャストする方法を知らないので、これを行うには小さなプログラムを書く必要があります。
setx
下ではないのですか?
' SetVar.vbs
Sub sety(wsh, action, typey, vary, value)
Dim wu
Set wu = wsh.Environment(typey)
wui = wu.Item(vary)
Select Case action
Case "ls"
WScript.Echo wui
Case "del"
On Error Resume Next
wu.remove(vary)
On Error Goto 0
Case "set"
wu.Item(vary) = value
Case "add"
If wui = "" Then
wu.Item(vary) = value
ElseIf InStr(UCase(";" & wui & ";"), UCase(";" & value & ";")) = 0 Then
wu.Item(vary) = value & ";" & wui
End If
Case Else
WScript.Echo "Bad action"
End Select
End Sub
Dim wsh, args
Set wsh = WScript.CreateObject("WScript.Shell")
Set args = WScript.Arguments
Select Case WScript.Arguments.Length
Case 3
value = ""
Case 4
value = args(3)
Case Else
WScript.Echo "Arguments - 0: ls,del,set,add; 1: user,system, 2: variable; 3: value"
value = "```"
End Select
If Not value = "```" Then
' 0: ls,del,set,add; 1: user,system, 2: variable; 3: value
sety wsh, args(0), args(1), UCase(args(2)), value
End If
setx
(インストールする必要はありません)。簡単な使用(私の場合):wsh.Environment("user").Item("myVar") = "my value"
:: Sets environment variables for both the current `cmd` window
:: and/or other applications going forward.
:: I call this file keyz.cmd to be able to just type `keyz` at the prompt
:: after changes because the word `keys` is already taken in Windows.
@echo off
:: set for the current window
set APCA_API_KEY_ID=key_id
set APCA_API_SECRET_KEY=secret_key
set APCA_API_BASE_URL=https://paper-api.alpaca.markets
:: setx also for other windows and processes going forward
setx APCA_API_KEY_ID %APCA_API_KEY_ID%
setx APCA_API_SECRET_KEY %APCA_API_SECRET_KEY%
setx APCA_API_BASE_URL %APCA_API_BASE_URL%
:: Displaying what was just set.
set apca
:: Or for copy/paste manually ...
:: setx APCA_API_KEY_ID 'key_id'
:: setx APCA_API_SECRET_KEY 'secret_key'
:: setx APCA_API_BASE_URL 'https://paper-api.alpaca.markets'