도스 배치 스크립트로 하위 폴더 압축을 반복 처리하기
도스 배치 스크립트를 이용하면 반복적으로 처리해야하는 하위 폴더들의 작업들을 자동화 할 수 있습니다.
압축 프로그램은 커맨드 라인 실행이 가능한 7zip을 사용합니다.
오픈소스 압축 프로그램이고 상업적인 용도로도 사용할 수 있습니다.
7zip이 없으면 먼저 7zip을 다운로드 받아 설치합니다.
https://www.7-zip.org/
배치 스크립트 완성본은 다음과 같습니다.
"bat" 확장자를 가지는 텍스트 파일로 저장하면 됩니다.
@echo off
cd c:\_data\workfolder
set sub_folder_list="sub1" "sub2" "sub3"
for %%f in (%sub_folder_list%) do (
cd %%f
del *.zip
7z a -tzip %%f.zip *.jpg *.gif
cd ..
echo %%f
echo ----------------------------------------
)
몇 줄 안되는 배치 스크립트지만, 여러 개의 하위 폴더 안에 있는 파일들을 압축해서 압축 파일을 반복적으로 생성해줍니다.
도스 배치 스크립트는 정해진 문법대로만 사용해야 하기 때문에 띄어쓰기를 잘 못해도 정상적으로 실행되지 않을 수 있습니다. 주의해야 합니다.
하나씩 설명합니다.
1. 메시지 출력을 끕니다.
@echo off
2. 작업할 하위 폴더들이 있는 부모 폴더 위치로 이동합니다.
현재 배치파일이 실행되는 폴더를 기준으로 실행하도록 하려면 이 행은 삭제하면 됩니다.
cd c:\_data\workfolder
3. 폴더 안의 파일들을 압축해서 압축 파일을 생성할 하위 폴더 목록을 작성합니다.
"sub_folder_list" 는 폴더 목록을 가지고 있는 변수가 됩니다. set은 변수를 선언하는 선언자입니다.
"sub_folder_list"와 하위 폴더 목록 사이의 "=" 앞뒤에는 공백이 없어야 합니다. 주의해야 합니다.
하위 폴더는 쌍따옴표("")감싸서 표시하고, 하위 폴더 이름 사이는 공백으로 띄웁니다.
set sub_folder_list="sub1" "sub2" "sub3"
4. "for" 루프문으로 "sub_folder_list" 배열 변수의 하위 폴더 이름을 하나씩 가져와 파일을 압축합니다.
for 루프에서 "%%f"는 "sub_folder_list" 변수 배열에 있는 하위 폴더 이름 하나를 가져와 저장하는 루프 안의 로컬 변수입니다.
"for" 루프 안의 모든 실행은 "%%f" 에 담긴 하위 폴더 이름을 사용해서 처리합니다.
for %%f in (%sub_folder_list%) do (
)
5. 하위 폴더로 이동합니다.
cd %%f
6. 하위 폴더에 이미 zip 파일이 있으면 삭제합니다.
del *.zip
7. 7zip 커맨드 실행 기능으로 하위 폴더 안의 "jpg", "gif" 이미지 파일들을 "하위폴더명.zip" 파일로 압축합니다.
"-tzip"은 대상이 "zip" 압축 파일이라는 옵션 파라메터 입니다.
7z a -tzip %%f.zip *.jpg *.gif
8. 다음 하위 폴더 처리를 위해서 상위 폴더로 이동합니다.
cd ..
현재 압축 파일을 만든 하위폴더 이름을 출력해서 어떤 하위 폴더가 처리되었는지 표시를 합니다.
echo %%f
echo ----------------------------------------
간단하지만 이렇게 배치 파일을 만들면 for 루프문을 돌면서 하위 폴더들 안에 있는 파일들을 압축해서 압축 파일을 생성하는 반복 작업을 수행할 수 있습니다.