ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 일정 기간마다 자동으로 네트워크 폴더를 백업하는 배치 파일 만들기
    기타 2018. 7. 19. 11:11

    네트워크 폴더에 있던 굉장히 중요한 문서들이 사라질 뻔한 이후로 백업을 더 자주 하자는 말이 나왔다.

    그동안은 무식하게 일주일에 한번씩 그냥 수동으로 복붙해서 아카이브를 만들고 있었는데

    이 참에 배치파일을 짜서 일주일에 세번 정도는 백업본을 만들어두라는 명령이 떨어졌다. 

    (백업과 아카이브는 다른 개념이고, 내가 하던 짓은 아카이브를 만드는 것에 가깝다는데 이것도 대충 검색해보고 주워들은 지식이므로 패스)

    도스 명령어라곤 CD 밖에 모르는 왕무식쟁이라서 오전 내내 명령어 검색해보고 테스트하느라 시간을 다 보냈다ㅠ.ㅠ


    필요한 작업은 아래와 같다.

    1. 내 로컬 드라이브에 백업본을 저장할 폴더를 날짜별로 자동 생성

    2. CMD 창에서 네트워크 드라이브에 접근

    3. 하위 폴더까지 포함한 네트워크 공유 폴더 내 모든 파일을 내 로컬 드라이브에 복사

    4. 윈도우 작업 스케줄러에 등록




    1. 날짜별로 폴더 새로 생성


    폴더 생성 명령어는 MD

    만약 같은 이름의 폴더가 없다면 새로 생성해주는 명령어는 다음과 같다.

    IF NOT EXIST "폴더명" MD "폴더명"


    여기에 날짜를 써서 폴더명을 생성하려면 %DATE%를 넣어주면 된다.

    예를 들어 D 드라이브의 BACKUP 폴더 하위에 날짜별로 폴더를 생성해주고 싶다면

    IF NOT EXIST "D:\BACKUP\"%DATE% MD "D:\BACKUP\"%DATE%




    2. CMD 창을 통해 접근 제어 중인 네트워크 공유 폴더에 접근


    그냥 윈도우 GUI 환경에서 네트워크 폴더에 접근한다면 탐색기나 폴더 아무거나 열어놓고

    네트워크 주소를 친 다음에 내 아이디와 암호를 입력하면 되지만

    나는 이 일련의 작업을 배치 파일로 돌려야 하기 때문에 도스 명령어를 써야 한다ㅠㅠㅠ  


    무식쟁이가 그냥 아무 생각 없이 CMD 창에서 CD \\드라이브주소 를 쳐봤더니

    CMD 에서 현재 디렉터리로 UNC 경로를 지원하지 않습니다.

    라는 메세지가 뜨면서 접근이 불가능했다.


    검색해보니 PUSHD 명령어를 사용해서 네트워크 드라이브에 임시로 드라이브 문자를 할당하여 접근이 가능하다고 한다..

    사용법은 PUSHD 네트워크드라이브주소


    예를 들어 \\192.168.1.1 에 접근한다고 하면 

    PUSHD \\192.168.1.1 

    이라고 쳐주기만 하면 된다. 드라이브 문자는 Z:\ 부터 순차적으로 부여된다.

    POPD 명령어를 쓰면 다시 할당받은 문자를 반환한다. 


    그래서 CMD 창에서 

    PUSHD \\드라이브주소

    XCOPY Z:\ D:\BACKUP\%DATE% /E /H /Y /K 

    를 순서대로 입력했더니 매우 잘 복사가 되는 것이 아닌가!

    신나서 배치 파일에 쓰고 파일을 실행해봤는데....




    그래서 할 수 없이 다른 방법을 검색해야 했다......




    2- 재시도. NET USE 명령어를 통해 네트워크 드라이브에 접근


    검색해보니 NET USE 명령어를 통해서도 공유 폴더에 접근할 수 있다. 

    CMD 창에서 NET USE /? 를 치면 사용법이 뜨는데 지금 나한테 필요한 명령어의 기본틀은

    NET USE 드라이브문자 네트워크드라이브주소 /USER:아이디 패스워드


    예를 들어 \\192.168.1.1\test 에 Z:\ 를 할당하고 아이디 userid1, 패스워드 pw1을 사용하여 접속한다고 하자. 그럼 명령어는

    NET USE Z: \\192.168.1.1\test /USER:userid1 pw1



    혹시 몰라 배치파일을 작성하기 전에 CMD창에서 네트워크 드라이브 접속 후 파일 복사까지 명령어를 쳐봤다.

    의심병, 테스트, 성공적


    연결을 끊으려면 NET USE /DELETE 드라이브문자 만 입력해주면 된다.

    NET USE /DELETE Z: 실행 결과




    3. 네트워크 드라이브의 모든 파일을 복사하기


    위의 단계에서도 이미 실행해보긴 했지만 도스 명령어 중 XCOPY 라는 것을 써서 

    네트워크 드라이브 내의 모든 파일들을 내 로컬 드라이브에 있는 백업용 폴더에 넣어주려고 한다.

    기본적인 명령어의 형태는 아래와 같다.  

    XCOPY 원본 복사위치 [옵션]


    XCOPY 옵션을 검색해보니 엄청나게 많이 나오는데 그걸 일일히 다 쓰기는 귀찮고 몇 개만 정리한다.


    /A     보관 특성을 가진 원본 파일을 복사하면서 보관 특성을 지우지 않음

    /C     오류가 생겨도 계속 복사를 실행함

    /D     M-D-Y 지정된 날자 이후에 바뀐 파일만 복사. 날짜 미지정 시 대상 파일보다 새로운 원본 파일만 복사

    /E     비어 있는 폴더를 포함하여 하위 폴더를 모두 복사

    /S     하위 폴더까지 모두 복사하되, 비어 있는 폴더는 제외

    /M    보관 특성을 가진 원본 파일을 복사하면서 보관 특성을 지움

    /K     파일의 속성을 복사 (이 옵션을 빼면 XCOPY가 읽기 전용 특성을 지움)

    /H     숨겨진 파일이나 시스템 파일 역시 복사

    /G     암호화된 파일을 복사

    /Q     아무런 메시지도 표시하지 않음

    /Y     복사할 때 이미 존재하는 대상 파일이 있다면 묻지 않고 덮어쓰기를 실행

    /-Y    복사할 때 이미 존재하는 대상 파일이 있다면 덮어쓸지 확인

    /Z     네트워크가 끊겼다가 다시 연결되면 복사를 재개


    아까 Z:\ 로 지정한 드라이브의 모든 파일을 복사해서 D:\의 BACKUP\오늘날짜폴더 로 밀어넣는 명령어는

    XCOPY Z:\ D:\BACKUP\%DATE% /E /G /H /K /Q /Y /Z

    (옵션은 내가 쓰고 싶은 것만 뽑아서 넣었다)


    최종적으로 내가 짠 배치파일은 이런 명령어들로 구성되었다.



    ECHO 와 PAUSE 는 테스트 단계에서 문제 없이 잘 돌아가는지 보고 싶어서 일부러 끼워 넣었다.

    이 배치파일을 실행하면 아래와 같이 잘 돌아가는 것을 볼 수 있다. 



    여기서 @ECHO OFF 는 배치 파일에서 명령어들을 출력하지 않게 해주는 역할을 한다.

    만약 @ECHO OFF 를 안 썼다면 

    IF NOT EXIST...NET USE....XCOPY....이런 애들이 전부 다 CMD 창에 출력되었을텐데 

    @ECHO OFF 가 들어가면서 캡쳐화면에서 보다시피 실행결과만 찍었다.

    반대로 명령어까지 출력하려면 @ECHO ON 을 선언해주면 된당




    4. 윈도우 작업 스케줄러에 배치 작업 등록


    이제 완성된 배치 파일을 주기적으로 실행해주기만 하면 된다.

    제어판 > 관리 도구 > 작업 스케줄러 에서 설정이 가능하다. 



    새 작업 스케줄러의 이름을 지정해주고




    트리거 탭으로 이동해서 새로 만들기 버튼 클릭



    작업을 언제 실행할지 설정해주고 



    동작탭에 가서 새로 만들기 버튼을 누르면 '새 동작 만들기' 창이 뜬다.

    이 창에서 찾아보기 버튼을 눌러 실행할 프로그램이나 배치 파일을 선택해주면 끝





    댓글

Designed by Tistory.