페이지

2015/08/04

환경변수 체크하기

환경변수 체크하기
우선은 자동화를 만들기 위해선 환경변수를 제대로 활용을 해야 한다. 이때 서로의 환경변수가 틀리기 때문에 이를 동기화를 시킬 필요가 있다. 이때 우선순위를 두고 이뤄져야 하는 작업이 환경변수를 체크하는 일이다.


모든 environment variables 를 가져오기
모든 변수의 list를 가져오는 방법은 의외로 간단하다.
set
을 치면 현재 선언된 변수들이 보여진다. 환경변수는 dos prompt를 실행 할 때 자동으로 실행이 되어 기본 변수들로 치환된다. (linux에서 커널과 같음)

이렇게 변수들이 무엇이 설정이 되어 있는지는 볼 수가 있으나 이걸 리스트 형태로 받아 올 수는 없어 보인다. (내가 못찾은거 일수도... 나중에 찾아보기)

그래서 해당하는 환경 변수가 있는지 없는지를 판단하는 무엇이 필요해 보인다.


현재 환경변수가 선언되었는지 체크하기
체크하는건 if문으로 쉽게 설정 할 수가 있다.
@echo off
if defined 변수명 (
 echo Yes
) else (
 echo No
)
를 적용하면 만약 있다면 Yes가 없으면 No가 출력이 될 것이다.
defined는 cmd에서 변수 선언에 대해서 알수 있는 커맨드이다.

이를 활용하면
@echo off
if not defined 변수명 ( setx 변수명 값 )
으로 사용 가능하고
(만약 변수명이 선언 되어 있지 않으면 환경변수에 넣어라)
@echo off
if defined 변수명 ( reg delete HKCU\Environment /F /V 변수명 )
으로 삭제도 가능함
(만약 변수명이 선언 되어 있다면 해당 환경변수를 지워라)


if문으로 현재 있는지 파악하기
@echo off
reg query HKCU\Environment /v 키값
if not errorlevel 1 (
 echo true
) else (
 echo false
)
위에 방법보다 보다 확실한 방법이다. 우선은 reg query 구문으로 해당하는 레지스트리에 키값을 받고 있으면 true값을 출력하게 설정해 놓았다. 만약에 해당 레지스트리에 아무 키값이 없다면 false 가 출력이 된다. 이 원리는 간단하다.
만약 키값이 없다면 error를 뱉는데 이때 error를 뱉지 않는다면 true값을 뱉으면 false로 가면되기 때문이다.

for 문으로 list 받아오기
for /f "tokens=1 delims= " %i in ('reg query hkcu\environment') do (echo %i)
for /f "tokens=1 delims= " %i in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"') do (echo %i)
를 사용하면 현재 key 값에 대한 리스트를 받아올수 있다.

위에 있는 문법은 다소 생소 할수가 있다. 이때 cmd prompt에서 for /? 를 치면 자세한 도움말을 볼수가 있다. 위와 같은 형태는 cmd에서 사용되는 형태이다. 이를 분석하면 아래와 같다.
  • for
    for문 시작
  • /f
    /f 이후의 옵션을 사용하겠다라는 내용 이때 옵션은 ""에 넣는다.
    /f 는 검색한다 라는 옵션이다.
  • "tokens=1 delims= "
    delims로 출력된 부분을 자르고 tokens으로 몇번째 문장을 가져갈지를 정한다.
    이때 ""으로 묶어야함
  • %i
    임시 변수 (만약 batch 파일을 만들려면 %%i로 현재 실행되는 폴더의 경로를 가져야 함)
  • in
    in 함수
  • ('reg query hkcu\environment')
    리스트, 이때 ''(작은 따옴표) 로 묶어줘야 함
  • do
    do 함수 (for 에 command를 시키는 구문)
  • (echo %i)
    command 함수
    여기에서 (@echo %i>>텍스트파일) 을 하면 텍스트 파일로 기록 할 수 있음

댓글 없음:

댓글 쓰기