다른 Windows 시스템에서 환경 변수를 설정해야하는데 "내 컴퓨터"의 속성 화면에서 수동으로 변경하는 것을 귀찮게하고 싶지 않습니다.
배치 파일을 사용하여 명령 줄에서 수행하고 싶습니다. 내가 이해하는 한, set을 사용하면 명령 창에서 호출 할 프로세스의 변수 만 변경됩니다.
확실히 설정하고 싶기 때문에 나중에 새 프로세스를 실행할 때 내가 설정 한 새 설정을 사용합니다. 명령 줄에서 수행하는 방법이 있습니까?
다른 Windows 시스템에서 환경 변수를 설정해야하는데 "내 컴퓨터"의 속성 화면에서 수동으로 변경하는 것을 귀찮게하고 싶지 않습니다.
배치 파일을 사용하여 명령 줄에서 수행하고 싶습니다. 내가 이해하는 한, set을 사용하면 명령 창에서 호출 할 프로세스의 변수 만 변경됩니다.
확실히 설정하고 싶기 때문에 나중에 새 프로세스를 실행할 때 내가 설정 한 새 설정을 사용합니다. 명령 줄에서 수행하는 방법이 있습니까?
답변:
cmd 창이 닫힌 후에도 지속되는 변수를 설정 하려면 SETX 명령 ( 'x'접미사 참고)을 사용하십시오.
예를 들어, 값이 "bar"인 env var "foo"를 설정하려면 :
setx foo bar
사용법 ( setx /?
) 을 인쇄하면 표시되는 '참고'를 읽을 가치가 있지만 특히 다음과 같습니다.
2) 로컬 시스템에서이 도구로 생성하거나 수정 한 변수는 향후 명령 창에서 사용할 수 있지만 현재 CMD.exe 명령 창에서는 사용할 수 없습니다.
3) 원격 시스템에서이 도구로 만들거나 수정 한 변수는 다음 로그온 세션에서 사용할 수 있습니다.
PowerShell에서 [Environment] :: SetEnvironmentVariable 명령.
[Environment]::SetEnvironmentVariable('PATH', "Whatever you need it to be", "Machine")
참조하십시오. msdn.microsoft.com/en-us/library/96xafkes(v=vs.110).aspx
환경 변수에 대한 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"
실제로 SET TEST_VARIABLE = value는 현재 프로세스에서만 작동하므로 SETX
필수입니다. 사용자 수준에서 환경 변수를 영구적으로 저장하는 간단한 예입니다.
SETX TEST_VARIABLE etc
. 되지 않음 (아직 적용 echo %TEST_VARIABLE%
쇼 %TEST_VARIABLE%
,echo %TEST_VARIABLE%
보여줍니다 etc
.etc
.:: 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'