테크팁·활용

도스 배치 스크립트로 하위 폴더 압축을 반복 처리하기

apost 2021. 6. 5. 21:00

도스 배치 스크립트를 이용하면 반복적으로 처리해야하는 하위 폴더들의 작업들을 자동화 할 수 있습니다.

 

압축 프로그램은 커맨드 라인 실행이 가능한 7zip을 사용합니다.

오픈소스 압축 프로그램이고 상업적인 용도로도 사용할 수 있습니다.

7zip이 없으면 먼저 7zip을 다운로드 받아 설치합니다.

 

https://www.7-zip.org/

 

7-Zip

7-Zip 7-Zip is a file archiver with a high compression ratio. Download 7-Zip 19.00 (2019-02-21) for Windows: Link Type Windows Size Download .exe 32-bit x86 1.2 MB Download .exe 64-bit x64 1.4 MB Download 7-Zip 21.02 alpha (2021-05-06) for Windows: Link Ty

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 루프문을 돌면서 하위 폴더들 안에 있는 파일들을 압축해서 압축 파일을 생성하는 반복 작업을 수행할 수 있습니다.