페이지

레이블이 environment variable인 게시물을 표시합니다. 모든 게시물 표시
레이블이 environment variable인 게시물을 표시합니다. 모든 게시물 표시

2015/08/13

[파이프라인] 초기 프로그램 환경 변수 및 파이썬 설치하기

@echo off



:: 디폴트 변수 설정
set tempPath=K:\programs
set version=2.7.3
set pythonInstallPath=\language\python\%version%\python-%version%.amd64.msi



:: 출력
echo ### 프로그램 환경 변수 입력하기 ###
echo =================================
echo [DEFAULT PATH] %tempPath%
echo 아무것도 입력하지 않으면 [DEFAULT PATH]가 입력됩니다.
echo ---------------------------------



:: Input 입력하기
:: 입력이 없을 경우 [DEFAULT PATH]가 입력됨
set /p inputPath="프로그램 경로 : "
IF NOT DEFINED inputPath (
    set prog_Path=%tempPath%
) else (
    set prog_Path=%inputPath%
)



:: 환경변수에 등록하기
setx PROGRAM_PATH %prog_Path% /m

:: --------------------------------- 선택 옵션
::REG QUERY HKCU\Environment /V PROGRAM_PATH
::IF errorlevel 1 (
::    setx PROGRAM_PATH %prog_Path% /m
::) else (
:: 누적시키기
::    setx PROGRAM_PATH %PROGRAM_PATH%;%prog_Path% /m
::)
:: ---------------------------------



:: 출력
echo.
echo.
echo.
echo ---------------------------------
echo ※Result※
echo ---------------------------------
echo [PROGRAM PATH] : %PROGRAM_PATH%



:: python 설치 되었는지 파악하기
set pyCheck=no
set pyInstall=YES

:: version에서 앞자리 3자리까지만 사용함
REG QUERY HKLM\SOFTWARE\Python\PythonCore\%version:~0,3%\InstallPath /ve
IF NOT errorlevel 1 (set pyCheck=yes)
REG QUERY HKLM\SOFTWARE\Wow6432Node\Python\PythonCore\%version:~0,3%\InstallPath /ve
IF NOT errorlevel 1 (set pyCheck=yes)
REG QUERY HKCU\SOFTWARE\Python\PythonCore\%version:~0,3%\InstallPath /ve
IF NOT errorlevel 1 (set pyCheck=yes)



:: 출력
echo.
echo.
echo.
echo.
echo.
echo ### 파이썬 %version% 설치하기 ###
echo =================================



:: 있으면 설치 여부 파악하기
IF %pyCheck% == yes (
    echo 이미 설치되어 있습니다.
    echo ---------------------------------
    set /p pyInstall="설치하겠습니까?[YES/NO] : "
)



:: 설치하기
:: /I 는 대소문자 구분 무시하기
IF /I %pyInstall% == yes (
    %PROGRAM_PATH%%pythonInstallPath%
    echo %PROGRAM_PATH%%pythonInstallPath%
    echo ---------------------------------
    echo ※Result※
    echo ---------------------------------
    echo python %version% 설치가 완료 되었습니다.
    echo.
:: 파이썬 버전 환경변수에 입력
    setx PYTHON_VERSION Python%version:~0,1%%version:~2,1% /m
    echo Python%version:~0,1%%version:~2,1% 이 환경변수에 입력되었습니다.
) else (
    echo ---------------------------------
    echo ※Result※
    echo ---------------------------------
    echo python %version% 설치가 중지 되었습니다.
)
pause

2015/08/04

cmd 에서 echo off 하는 이유

배포판 batch 파일 만들 때 echo off 하기
우선은 cmd에서는 명령어를 기본으로 하기 때문에 명령어가 실행이 되면 어떤 명령어가 되었는지 따라 적히는 일명 복창(반복)이 된다. 이때 명령어이기 때문에 줄이 길어지고 헷갈리게 될 수가 있는데 이럴때에는
@echo off
를 사용해서 끌 수가 있음. 기본적으로는 on이 되어 있음. batch파일 제일 앞에 위 명령어를 사용하면 두번 다시 보지 않아도 된다. (하지만 어떤 명령어가 완료 된지 모르기 때문에 echo 상태 를 적어주는 것을 권장)
이때 echo는 프로그래밍에서 print와 같은 성격이며 앞에 @를 붙이지 않았다면 off를 출력하겠다는 뜻으로 해석되기 때문에 반드시 @를 붙여줘야 한다.

참고 : http://mwultong.blogspot.com/2006/05/dos-echo-off.html

개인 ref : pipeline >> cmd에서 echo off 하는 이유.mht

환경변수 체크하기

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


모든 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>>텍스트파일) 을 하면 텍스트 파일로 기록 할 수 있음

2015/08/03

윈도우에서 환경변수 설정하기

windows의 environment variable의 종류
system variable
- windows 가 시작 될때 선언 되는 variable
user variable
- windows 가 시작 되고 user 계정이 시작 될때 선언 되는 variable

따라서 제일 처음 선언되는 변수는 system variable이며 이후에 user variable이 선언이 된다. 프로그래밍에서 치환되는 성격을 가지고 있기 때문에 기존에 있는 변수명이 겹칠 경우 제일 마지막에 선언되는 user 계정에서 선언된 값을 가지고 있게 된다.

system variable 는 윈도우(os)의 값을 가지고 있고 그중 여러 계정을 가지고 있다면 계정 별로 user variable을 가질수 있다.

제일 마지막에 선언되는게 user variable이지만 한 컴퓨터로 여러 계정을 사용할 경우 system variable 에 선언하여서 전역 변수와 같은 형태로 사용 할 수가 있다.


cmd (dos) 에서 variable 선언하기
변수 선언
set 변수명=값
= 양옆에 공백이 존재 하면 안됨

변수 출력
%변수명%
%을 변수명 양옆에 붙임 만약 붙이지 않을 경우 변수명을 문자로 인식함
하지만 echo를 붙이지 않으면 출력이 아닌 실행으로 인식함

echo 명령어 사용 (print와 같음) - 출력용
echo %변수명%

변수 지우기
set 변수명=
변수명을 아무것도 없는 null로 치환 하면 변수는 지워짐

참고 : http://mwultong.blogspot.com/2006/08/dos-batch-variable.html

개인 ref : pipeline >> cmd 변수 선언하기.mht


cmd (dos) 에서 environment variable 선언하기
변수 선언
user
setx 변수명 값
system
setx 변수명 값 /m
변수를 선언할땐 기존에 변수 선언과 동일하지만 =은 사용하지 않는다. 그리고 setx 으로 설정을 해야 한다. 이때 system과 user방식은 선택할 수 있는데 /m 을 붙여주면 된다. 위치는 상관없이 적용된다. (제일 앞에는 해당하지 않음)

변수 출력 (위와 동일)
%변수명%
%을 변수명 양옆에 붙임 만약 붙이지 않을 경우 변수명을문자로 인식함
하지만 echo를 붙이지 않으면 출력이 아닌 실행으로 인식함

echo 명령어 사용 (print와 같음) - 출력용
echo %변수명%

변수 지우기
환경변수에서 지우는 일은 cmd 명령으로는 불가능, 그래서 reg로 접근해서 지워야 함
user
REG delete HKCU\Environment /F /V 변수명
system
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V 변수명
으로 지워야 함, 이때 Session Manager에는 white space가 존재해서 경로에 ""으로 묶어줘야 한개의 경로로 인식함

참고 : http://snoopybox.co.kr/1299
참고 : http://stackoverflow.com/questions/13222724/command-line-to-remove-an-environment-variable-from-the-os-level-configuration

개인 ref : pipeline >> 환경 변수 설정하기.mht
개인 ref : pipeline >> 환경 변수 지우기.mht


windows7에서 자주 사용되는 시스템변수
  • %allusersprofile%
    C:\ProgramData
  • %appdata%
    C:\Users\사용자계정\AppData\Roaming
  • %homepath%
    \Users\사용자계정
  • %localappdata%
    C:\Users\사용자계정\AppData\Local
  • %programfiles%
    C:\Program Files
  • %programfiles(x86)%
    C:\Program Files (x86)
  • %systemdrive%
    C: (현재 윈도우가 설치되어 있는 드라이브)
  • %systemroot%
    C:\windows
  • %temp%
    C:\Users\사용자계정\AppData\Local\Temp
  • %userprofile%
    C:\Users\사용자계정
  • %windir%
    C:\windows

출처 : http://snoopybox.co.kr/1299

개인 ref : pipeline >> 환경 변수 설정하기.mht