+ Recent posts

728x90
반응형

안녕하세요. 

 

쉐어스퀘어

입니다. 

 

지난 강의에서는 배치 파일의 정의, 사용 목적, 배치 파일 생성 방법에 대해 알아보았습니다. 

 

[아래 링크 참조▼] 

 

https://itchapter.tistory.com/3?category=1071190

 

[배치파일(.bat) 정보공유]필요한 PC 명령들을 하나의 파일에 담아 실행할 수 있게 하는 배치파일(.

안녕하세요. ITWriter 입니다. 어느덧 가을이 왔습니다. 공기가 시원해지고, 저녁이 되면 추위가 느껴질 정도로 기온이 내려가기도 하네요. 이럴 때 감기 걸리기가 좋은 것 같습니다. 감기 조심하

itchapter.tistory.com

 

이제는 배치 파일에 원하는 작업들을 하나하나 넣는 방법들에 대해 알아보겠습니다. 

 

오늘 나눌 내용은

 

특정 네트워크(공유 폴더)로 연결해서

네트워크 상의 배포하고자 하는 파일이 로컬 PC에 있는지 존재 여부를 확인한 후

없으면 복사를 하도록 하는" 배치 파일을 생성하는 방법입니다.

 

자 ! 시작해 봅시다! 

 

1. 네트워크(공유 폴더) 연결 

 

192.168.111.11 이라는 네트워크 상에 있는 down이라는 폴더에 연결하는 것을 가정해 봅시다. 

 

그리고 접근 권한으로 ID 는 itwriter PW는 itisfun 로 가정해 볼게요. 

 

접근 명령은 아래와 같습니다. 

 

net use S: \\192.168.111.11\down "itisfun" /user:itwriter

 

환경에 따라 수정이 필요한 부분은 대괄호로 묶었고, 빨간색 부분은 그대로 입력해 주시면 됩니다. 

 

net use [네트워크드라이브명(알파벳)]: [네트워크IP포함 참조경로] "[네트워크암호]" /user:[사용자ID]

 

하나의 예시일 뿐이지 사용자 ID와 PW를 넣는 방법은 다양합니다.(구글링 해보시면 여러 예제가 있습니다.) 

 

그리고 네트워크 드라이브 Alias 알파벳명 같은 경우

 

사용자들이 잘 사용하지 않을 것 같은 알파벳으로 선택해서 하시는 게 좋습니다.

 

2. 특정 경로에 파일이 있는지 존재 여부 확인 후, 파일 존재 유무에 따른 복사/붙여 넣기 

 

특정 경로에 파일이 있는지에 대한 존재 여부를 확인하기 위해서는

 

있는지? 없는지? 상황이 존재하기 때문에 조건문 사용이 필요합니다. 

 

보통 개발자분들이 흔히 쓰시는 IF문을 예로 들어 설명드리겠습니다. 

 

배치 파일 스크립트 문법상 IF 문의 형태는 

 

IF [조건절] (
                       {처리 내용 1}
) ELSE (
                       {처리 내용 2}

 

입니다.

 

그리고 파일의 존재 여부 확인은

 

EXIST "[파일 전체 경로]"

 

입니다. 

 

위 내용을 조합해서 로컬 PC의 C드라이브의 utility라는 폴더에 video1.avi라는 파일이 있는지 여부를 확인해서 

 

존재하는 경우 "해당 파일이 존재합니다. 덮어쓰기를 진행하겠습니다" 

 

그리고 

 

존재하지 않는 경우 "해당 파일이 존재하지 않습니다. 복사를 진행하겠습니다"

 

결과가 표출되도록 하는 스크립트를 짜 보겠습니다. 

 

IF EXIST "C:\utility\video.avi" (
    echo 해당 파일이 존재합니다. 덮어쓰기를 진행하겠습니다
) ELSE (
   echo 해당 파일이 존재하지 않습니다. 복사를 진행하겠습니다"
)

 

이렇게 구성한 스크립트를 실행해 보면 해당 경로에 파일이 없기 때문에

 

아래와 같이 결과 내용이 표출됩니다. 

보니 가장 아래 부분에 48초 기다리는 중, 계속하려면 아무 키나 누르십시오 ... 가 표출되고 있는데 

 

궁금하지 않으신가요? 바로 일정 시간 딜레이를 생성하는 timeout 명령어입니다. 

 

timeout 뒤에 딜레이 시간(초)을 입력을 해주시면 되고

 

배치 파일 실행 시 그 시간(초) 만큼 다음 스크립트로 넘어가지 않고 프로세스가 대기 상태에 머무르게 됩니다.

 

이런 명령어 정보들은 굳이 외우실 필요가 없습니다. 정보가 너무 많은 세상인 만큼 

 

구글에서 영문으로, 한글로 필요하신 정보들을 검색해서 응용해주시면 됩니다. 

 

3. 파일 복사/덮어쓰기 명령 

 

 xcopy [복사 대상 파일 전체 경로] [복사 파일 붙여 넣기 경로] /e /h /k /y

 

자주 쓰는 명령어이고요, /e /h /k /y 는 해당 명령어의 옵션인데

 

/e : 명명된 경로 상에 디렉터리가 없더라도 생성하겠다는 옵션

 

/h : 숨겨진 파일과 시스템 파일도 복사하겠다는 옵션

 

/k : 해당 파일의 특성(rwx)을 복사하겠다는 옵션 

 

/y : 이미 있는 파일에 대해서 덮어쓰기 여부를 묻지 않고 처리한다는 옵션

 

이런 의미를 가지고 있습니다. 

 

배치 파일 상에 스크립트를 이것저것 넣어서 한 번에 실행을 해야 하는데, 

 

위의 네 개의 옵션이 빠진 상태로 하게 되면 

 

진행하시겠습니까? 덮어쓰시겠습니까? 하는 확인 명령이 지속 표출되면서 

 

배치 파일의 실행이 멈춰버리는 문제들이 발생하기 때문에 이에 대한 해소를 위해 주로 사용하는 옵션입니다. 

 

단, 이와 같은 옵션을 사용한 스크립트를 만들 때는 강제로 처리를 하는 옵션들이기 때문에 

 

시스템 파일, 폴더가 변조되거나, 지워지지 않도록 스크립트를 짜실 때 유의해서 작성하셔야 합니다. 

 

자 ! 그러면 1~3번으로 설명드렸던 내용을 바탕으로 예제를 하나 만들어 보겠습니다. 

 

① : 특정 네트워크 경로에 연결 설정 (Alias : S) 


    ② - 1 : 로컬 PC의 특정 경로에 원하는 파일이 없으면, S드라이브에서 파일 복사 


    ② - 2 : 파일이 있으면 패스 


③ : 네트워크 연결 해제(S드라이브)

 

조건문 IF에서 TRUE / FALSE 상태에 따라 필요한 스크립트가 처리되도록 하기 위해 

 

GOTO 명령문을 함께 사용할 예정(빨간색 굵은 글씨 참조)입니다.

 

아래를 보시면 직관적으로 이해되실 겁니다. 

 

[예제]

 

rem 네트워크 연결 (S드라이브) 

net use S: [네트워크 연결 목적지 경로]

rem 조건문(IF) 실행 파일 체크 

IF EXIST "C:\utility\video.avi" (
 
    echo 해당 파일이 존재하여, 스크립트를 종료합니다. 
    goto END_PROGRAM

) ELSE (

   echo 해당 파일이 없습니다. 파일을 복사합니다.
   goto COPY_FILE

)

:COPY_FILE
xcopy S:\video.avi C:\utility\ /e /h /k /y 
echo y | net use /delete S:
timeout 30
exit;


:END_PROGRAM
echo y | net use /delete S:
timeout 30
exit

 

 

자 ! 이렇게 정상적으로 파일이 없는 걸 체크해서, 

 

먼저 연결해 놓은 네트워크 경로에서 video.avi 파일을 복사하는 것을 볼 수 있습니다. 

 

그런데 여기서 ! 

 

위의 예제를 그대로 만들어서 실행하셨을 때, 

 

한글이 깨지면서 명령어를 정상적으로 인식하지 못하는 문제가 발생하게 됩니다. 

 

왜일까요?? 저도 정말 많이 헤맸었고, 긴 시간 동안 모르고 있었습니다. 

 

특이한 점은 배치 파일의 스크립트를 모두 복사해서 cmd 창을 직접 열어서 붙여 넣기를 하면 

 

정상적으로 실행이 된다는 겁니다. 왜일까요?? 무엇이 다른 걸까요?? 

 

한글이 깨진다면 인코딩을 의심해 보셔야 합니다. 배치파일의 인코딩 설정을요. 

 

기본적으로 텍스트 파일은 UTF-8로 인코딩이 설정되어 있습니다. 

 

이것이 문제였습니다. UTF-8 로 되어 있는 인코딩 설정을 ANSI 로 바꿔주시면 됩니다. 

 

변경하는 방법은 배치 파일을 우클릭하신 후 

 

편집을 눌러 편집기를 엽니다. 

 

그리고 다른 이름으로 저장을 선택해서 다른 이름으로 저장 창을 열게 되면 

우측 하단에 인코딩(E): 표시가 있는 것을 확인할 수 있습니다. 

 

 

 

여기 설정을 ANSI 로 바꿔주시고 저장을 하시면 됩니다. 

 

 

자! 그러고 나서 배치 파일을 실행해 보시면 한글 깨짐 증상 없이 

 

정상적으로 배치가 실행되는 것을 확인할 수 있습니다. 

 

자 ! 이렇게 오늘은    

 

 네트워크 연결을 설정하고, 
  
             로컬 PC 경로상 파일 존재 여부를 체크해서 

                 파일이 없는 경우 연결된 네트워크 경로로부터 파일을 복사하는

배치 예제를 설명드렸습니다. 

 

조건에 따라 스크립트 라인을 이동시키는 GOTO 명령어도 알아보았고요. 

 

또한 한글 깨짐 증상에 대한 해결 방법을 안내드렸습니다. 

 

다음에는 주기적으로 반복 프로세스를 PC에 처리하고 싶을 때 사용하는 작업 스케쥴러를

 

배치 파일로 등록하는 방법에 대해 알아보겠습니다. 

 

※ 언제든 궁금하신 것 있으시면 무엇이든 댓글로 남겨주세요. 성심껏 답변드리겠습니다.

 

이상 쉐어스퀘어 였습니다. 

 

감사합니다. 

 

오늘의 글이 도움이 되셨다면, 
하단의 공감, 구독 버튼을 꾸욱 눌러주시면 

IT관련해서 더 유용한 글을 제가 작성하는데에 
큰 힘이 됩니다 :) 
감사합니다.


 

728x90
반응형