본문 바로가기

운영체제

[Windows/DOS Batch] 특정 폴더의 파일을 날짜가 포함된 파일로 압축하여 FTP로 전송하기

특정 폴더에 생성된 파일들을 DOS Batch(배치파일) 스크립트를 작성한 스크립트를 이용하여 다른 서버로 FTP를 이용하여 전송해야할 일이 생겼다.

다른 부분은 배치파일을 작성하는 방법을 알고 있었지만 다음의 두가지는 방법을 찾아야 했다.

 1. 폴더내의 파일들을 하나의 파일로 묶는 방법

2. 생성할 압축파일의 파일명에 오늘 날짜를 포함하도록 하는 방법

 파일을 하나로 묶는 법은 유로 압축파일 프로그램을 이용하면 되지만 압축프로그램을 정품으로 구매하여야 하기에 비용부담이 있고 명색이 공공기관에서 불법S/W를 사용할 수는 없었다.  방법을 찾아보니 마이크로소프트에서 제공하는 CAB 파일포맷으로 파일들을 압축해주는 공개소프트웨어를 구할 수 있었다. 당연히 설치는 필요없는 단일 파일로된 명령행 프로그램이다.

 파일명에 날짜를 포함시키는 것은 DOS BATCH 파일을 거의 작성해본적이 없어 쉽지 않았다. 하지만 도스에서 사용해본적이 있는 date 명령과 time 명령에 에 /t 옵션을 주면 오늘날짜와 시간을 출력해주는 것을 이용해 해결할 수 있었다.

 결국 다음과 같은 BATCH 파일을 작성하였고 Windows의 작업 스케줄러에 등록하여 주기적으로 생성된 파일들을 하나의 CAB 파일로 압축하여 다른 서버로 백업할 수 있었다.

 -------------------------------------------------------------------------------

 for /F "tokens=1" %%a in ('date /t') do set DATE_TODAY=%%a
for /F "tokens=1" %%a in ('hostname') do set HOSTNAME=%%a

set yy=%DATE_TODAY:~0,4%
set mm=%DATE_TODAY:~5,2%
set dd=%DATE_TODAY:~8,2%

 SET FILENAME=%HOSTNAME%-%yy%%mm%%dd%.cab

 echo %FILENAME%
echo %HOSTNAME%

 d:

cd files

 cabarc -r -p N %FILENAME% *.*

echo open 192.168.2.136 > upload.txt
echo user account 123456>> upload.txt
echo bin >> upload.txt
echo prompt off >> upload.txt
echo cd %HOSTNAME% >> upload.txt
echo put %FILENAME%  >> upload.txt
echo quit >> upload.txt


c:\windows\system32\ftp -v -n -s:upload.txt

 del /F /S /Q /A .

rmdir /S /Q .