본문 바로가기
팁에 대한 고찰

도스 배치를 사용하여 FTP 자동 전송기능 배치파일

by 로젠크로와싱 2012. 12. 12.
반응형

협업에서 사용하는 출퇴근 데이터를 DB서버에 INSERT 하기전인 DB서버에 데이터 파일을 전송하기 위한 윈도우의 FTP자동전송 배치입니다. 간단하게 파라미터만 입력하면 자동으로 FTP 배치를 만들어 윈도우의 스케쥴링 작업에 매일 1시간 단위로 등록하게되는 배치이죠.

조금 허접한 파일일 수도 있지만, 다듬고 다듬는다면 괜찮은 배치라고 생각됩니다. 

cls 

@echo off

setlocal

echo --------------------------

echo 예약작업 등록 배치파일 초기화

echo --------------------------

SET JOB_FILE="daily_job.bat"

echo @echo off>%JOB_FILE%

echo setlocal>>%JOB_FILE%

echo rem HOST IP 주소>>%JOB_FILE%

echo SET RE_HOST="%1">>%JOB_FILE%

echo SET RE_ID="%2">>%JOB_FILE%

echo SET RE_PASS="%3">>%JOB_FILE%

echo SET RE_DIR="%4">>%JOB_FILE%

echo SET DIR="%5">>%JOB_FILE%

echo rem 시간 구하기>>%JOB_FILE%

echo SET YEAR=%%date:~0,4%%>>%JOB_FILE%

echo SET MONTH=%%date:~5,2%%>>%JOB_FILE%

echo SET DAY=%%date:~8,2%%>>%JOB_FILE%

echo SET FTP_FILE="%3%%MONTH%%%%DAY%%.bat">>%JOB_FILE%

echo echo open %%RE_HOST%%^>^>%%FTP_FILE%%>>%JOB_FILE%

echo echo user %%RE_ID%% %%RE_PASS%%^>^>%%FTP_FILE%%>>%JOB_FILE%

echo echo binary^>^>%%FTP_FILE%%>>%JOB_FILE%

echo if exist %6 (>>%JOB_FILE%

  echo echo cd %%RE_DIR%%^>^>%%FTP_FILE%%>>%JOB_FILE%

  echo echo lcd %%DIR%%^>^>%%FTP_FILE%%>>%JOB_FILE%

  echo echo put %6^>^>%%FTP_FILE%%>>%JOB_FILE%

echo )>>%JOB_FILE%

rem echo echo close^>^>%%FTP_FILE%%>>%JOB_FILE%

rem echo echo quit^>^>%%FTP_FILE%%>>%JOB_FILE%

echo echo bye^>^>%%FTP_FILE%%>>%JOB_FILE%

echo ftp -i -n -s:%%FTP_FILE%%^>^>C:\ftp%date%.log>>%JOB_FILE%

echo del %%FTP_FILE%%>>%JOB_FILE%

rem windows 폴더로 이동

MOVE /Y %JOB_FILE% %windir%

cls 

net start "task scheduler"

AT 00:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 01:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 02:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 03:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 04:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 05:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 06:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 07:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 08:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 09:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 10:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 11:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 12:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 13:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 14:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 15:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 16:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 17:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 18:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 19:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 20:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 21:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 22:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

AT 23:00 /every:M,T,W,Th,F,S,Su "cmd /c %windir%\\%JOB_FILE%"

echo 근태기 자동 업로드 등록완료

rem 초기화 배치파일 삭제

del daily_job_init.bat

배치에 쓰인 명령어

cls : 화면을 클리어

@echo off : 대화형 끄기 - 명령 prompt를 끄는 기능

echo : 화면에 출력

set : 환경변수 설정

setlocal : 모든 set 환경변수를 지역변수로 설정

rem : 주석

>, >> : c언어 기준으로 설명하면 >는 w, >>는 w+ 또는 a

% : 환경변수 출력에 %를 둘러 쌓을 경우에는 환변경수 값이 나오지 않고, 환경변수이름이 나오게 된다.

      set a="b"  

      echo %a%            -> b

      echo %%a%%       -> %a%

if : 조건절 ()로 둘러 쌓인 것이 특징

exist : 파일 또는 디렉토리가 존재 유무 체크

^ : echo로 출력시 배치문법 %, <같은 문법이 echo에 있다면 그 문구의 앞까지 출력되는 것을 ^를 주어서 문자로 인식하게 하는 기능

     echo echo abc > a.log > b.log라고 하면 b.log에는 echo abc만 출력됨, echo echo abc ^< a.log < b.log시에 echo abc < a.log 가 b.log에 기록됨

ftp -i -n -s:bat_file_name : 이렇게 할 경우, 동작중인 배치와 같은 경로에 bat_file_name이 전송된 동시에 bat_file_name을 실행함

                                      그냥 ftp ip 를 실행하면 대화형 기능으로 인해, ID, PASS를 묻는 화면이 나와서 자동 업로드가 안되어 배치 전송실행 기능으로 해결

                                      open, user, binary, put, close, bye 는 ftp가 실행하고 나서의 명령어

move : /Y 옵션으로 무조건 Yes로 파일을 이동하게 된다. move /Y 이동시킬파일 이동할경로

at : 도스의 스케쥴링 명령어, (자매품 schtasks 윈도우형 스케쥴링명령어)

      at 시:분 /every[또는 next]:요일 Command    

      요일 : 월:M, 화:T, 수:W, 목:Th, 금:F, 토:S, 일:Su

del : 파일 제거

반응형