다른 Windows 시스템에서 환경 변수를 설정해야하는데 “내 컴퓨터”의 속성 화면에서 수동으로 변경하는 것을 귀찮게하고 싶지 않습니다.
배치 파일을 사용하여 명령 줄에서 수행하고 싶습니다. 내가 이해하는 한, set을 사용하면 명령 창에서 호출 할 프로세스의 변수 만 변경됩니다.
확실히 설정하고 싶기 때문에 나중에 새 프로세스를 실행할 때 내가 설정 한 새 설정을 사용합니다. 명령 줄에서 수행하는 방법이 있습니까?
답변
cmd 창이 닫힌 후에도 지속되는 변수를 설정 하려면 SETX 명령 ( ‘x’접미사 참고)을 사용하십시오.
예를 들어, 값이 “bar”인 env var “foo”를 설정하려면 :
setx foo bar
사용법 ( setx /?
) 을 인쇄하면 표시되는 ‘참고’를 읽을 가치가 있지만 특히 다음과 같습니다.
2) 로컬 시스템에서이 도구로 생성하거나 수정 한 변수는 향후 명령 창에서 사용할 수 있지만 현재 CMD.exe 명령 창에서는 사용할 수 없습니다.
3) 원격 시스템에서이 도구로 만들거나 수정 한 변수는 다음 로그온 세션에서 사용할 수 있습니다.
PowerShell에서 [Environment] :: SetEnvironmentVariable 명령.
답변
환경 변수에 대한 MSDN 문서는 무엇을해야할지 알려줍니다 :
프로그래밍 방식으로 시스템 환경 변수를 추가하거나 수정하려면 HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment 레지스트리 키에 추가 한 다음 lParam이 “Environment”문자열로 설정된 WM_SETTINGCHANGE 메시지 를 브로드 캐스트합니다 . 이를 통해 셸과 같은 응용 프로그램이 업데이트를 선택할 수 있습니다.
물론이 작업을 수행하려면 관리자 권한이 필요합니다. Windows 배치에서 Windows 메시지를 브로드 캐스트하는 방법을 알지 못하므로이 작업을 수행하려면 작은 프로그램을 작성해야합니다.
답변
' 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
답변
실제로 SET TEST_VARIABLE = value는 현재 프로세스에서만 작동하므로 SETX
필수입니다. 사용자 수준에서 환경 변수를 영구적으로 저장하는 간단한 예입니다.
- cmd에서
SETX TEST_VARIABLE etc
. 되지 않음 (아직 적용echo %TEST_VARIABLE%
쇼%TEST_VARIABLE%
, - 빠른 검사 : 개방 cmd를
echo %TEST_VARIABLE%
보여줍니다etc
. - GUI 확인 : 시스템 속성-> 고급-> 환경 변수-> 사용자 변수-> 값이있는 Varible TEST_VARIABLE이 표시되어야합니다
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'