공유 블로그

모든 Batch파일은 악의적으로 사용하지 않을 것을 권고드립니다!!

 

통상적으로 setx(환경변수) 등록할 때 cmd에서 바로 인식하지 못합니다.

하지만 이런방법을 해결할 수 있습니다.

 

일단 배치파일 2개가 필요합니다.

첫 번째는 setx 등록할 배치파일

두 번째는 setx 읽어드릴 배치파일이 필요합니다.

 

만약 이 2가지를 합치면 문법 오류가 나오게 됩니다...

 

째든 코드를 보시죠~

 

(복붙 하면 코드가 깨져서 나올 수 있으니 아래 첨부 파일 해두었습니다.)

(vscode로 진행하는 것을 추천드립니다. [접기 기능 사용 가능])

 

배치 파일 코드

test1.bat

::.bat 기본 세팅 값
  @echo off
  @chcp 65001
  set mypath=%~dp0
  setx "Auto_INSTALL" -m "%mypath%
  cls

cmd /k "%Auto_INSTALL%test2.bat"

 

test2.bat

::.bat 기본 세팅 값
  @echo off
  @chcp 65001
  cls


:: 기초설치
:CHECKING
  
  ::refresh 경로
  set mypath=%Auto_INSTALL%
  
  :: 기초설치 확인
    if "%mypath%" == "" (
      cls
      echo.
      echo 설치파일 확인하고 있습니다.
      echo 잠시만 기다려 주십시오.
      echo 설치파일 등록중...
      timeout 3
      cls

      ::----------------------------------------------------------------
      :: RefreshEnv.cmd
      ::
      :: 레지스트리에서 환경 변수를 읽는 배치 파일 및
      :: 세션 변수를 이 값으로 설정합니다.
      ::
      :: 이 배치 파일을 사용하면 명령을 다시 로드할 필요가 없습니다.
      :: 환경 변경 사항을 전파할 때마다 환경

      ::echo "RefreshEnv.cmd는 cmd.exe에서만 작동합니다. PowerShell의 refreshenv를 활용하려면 Chocolatey 프로필을 설치하세요."
      echo | set /p dummy="Refreshing environment variables from registry for cmd.exe. Please wait..."

      goto main

      :: 레지스트리 키에서 하나의 환경 변수 설정
      :SetFromReg
        "%WinDir%\System32\Reg" QUERY "%~1" /v "%~2" > "%TEMP%\_envset.tmp" 2>NUL
        for /f "usebackq skip=2 tokens=2,*" %%A IN ("%TEMP%\_envset.tmp") do (
            echo/set "%~3=%%B"
        )
        goto :EOF

      :: 레지스트리에서 환경 변수 목록 가져오기
      :GetRegEnv
        "%WinDir%\System32\Reg" QUERY "%~1" > "%TEMP%\_envget.tmp"
        for /f "usebackq skip=2" %%A IN ("%TEMP%\_envget.tmp") do (
            if /I not "%%~A"=="Path" (
                call :SetFromReg "%~1" "%%~A" "%%~A"
            )
        )
        goto :EOF

      :main
        echo/@echo off >"%TEMP%\_env.cmd"
        :: 천천히 최종 파일 생성
        call :GetRegEnv "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" >> "%TEMP%\_env.cmd"
        call :GetRegEnv "HKCU\Environment">>"%TEMP%\_env.cmd" >> "%TEMP%\_env.cmd"

        :: PATH에 대한 특별 처리 - 사용자와 시스템을 모두 혼합
        call :SetFromReg "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" Path Path_HKLM >> "%TEMP%\_env.cmd"
        call :SetFromReg "HKCU\Environment" Path Path_HKCU >> "%TEMP%\_env.cmd"

        :: 주의: >> 리디렉션 기호 앞에 공백 문자를 삽입하지 마십시오.
        echo/set "Path=%%Path_HKLM%%;%%Path_HKCU%%" >> "%TEMP%\_env.cmd"

        :: 정리
        del /f /q "%TEMP%\_envset.tmp" 2>nul
        del /f /q "%TEMP%\_envget.tmp" 2>nul

        :: 캡처 사용자 / 아키텍처
        SET "OriginalUserName=%USERNAME%"
        SET "OriginalArchitecture=%PROCESSOR_ARCHITECTURE%"

        :: 이 변수를 설정합니다.
        call "%TEMP%\_env.cmd"

        :: 정리
        del /f /q "%TEMP%\_env.cmd" 2>nul

        :: 사용자 / 아키텍처 재설정
        SET "USERNAME=%OriginalUserName%"
        SET "PROCESSOR_ARCHITECTURE=%OriginalArchitecture%"
        echo | set /p dummy="Finished."
        echo .



        goto :CHECKING

      exit
    ) else (
      echo.
      echo 등록 성공!! ["%Auto_INSTALL%"]
      echo 등록이 성공적으로 되었습니다!!
      echo.
      echo 계속 진행 하려면 아무키나 입력...
      pause >nul
      goto :DONE
    )

사용 조건

1. 무조건 관리자 권한으로 실행하셔야 setx(환경변수)가 등록됩니다.

2. 같은 폴더 위치해 있어야 동작합니다.

3. 맨 마지막에 :DONE 을 하나 만들어서 코드 작성 부분을 입력해주시면 되겠습니다.

 

안될 시 댓글 주세요~

 

batch파일은 항상 띄어쓰기 주의하십시오!!(파워셀에서 실행하지 말 것...)

 

출처 : https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/redirects/RefreshEnv.cmd

 

코드 설명

설명하기는 너무 어려워서 생략하겠습니다(저도 검색해서 퍼온 거라.. 죄송..)

 


파일 첨부

test.zip
0.00MB

 

확인 영상

https://www.youtube.com/watch?v=tdWYxxvNA40 

 

다음 작업

지금 쓰고 있는 블로그는 "https://all-share-source-code.tistory.com/10"내용을 업데이트 하기 위한 작업입니다.

많이 이용 부탁드립니다~

 

관련 글

  1. 2020.07.30 - [OS/WINDOWS] - Windows 포맷후 전에 깔려있는 프로그램들 한번에 설치 방법 {업데이트중...}
  2. 2021.08.27 - [Project/Batch] - 관리자권한 실행 안하고 Batch파일로 관리자권한 취득하기
  3. 2021.08.26 - [Project/Batch] - Batch파일 "Y(es)"입력 받을때 까지 Loop
  4. 2021.09.08 - [Project/Batch] - Batch파일 Refresh(setx 인식) 하기

 

 

최종본

https://all-share-source-code.tistory.com/41

 

Windows 포맷후 전에 깔려있는 프로그램들 한번에 자동 설치 방법 Ver2

아직 버그가 있어 이때까지 만든 영상 올려 봅니다.( 시간 날때만 틈틈이 만들어 재작이 좀 늦네요.ㅎㅎ;; ) 내용에 참고한 링크들 https://all-share-source-code.tistory.com/40 https://all-share-source-code...

all-share-source-code.tistory.com

 

공유하기

facebook twitter kakaoTalk naver band kakaostory Copy URL