안녕하세요 배치파일 의 최종버전 입니다.
아직 배치파일 만들기와 문법에 익숙하지 않는 분들은
[IT/Windows] - 배치파일 만들기/bat 파일 만들기
[IT/Windows] - 배치파일 명령어/배치파일 명령어모음
[IT/Windows] - 배치파일/연산자/쉘 스크립트 동의어/장치 연산자
확인 하시면 됩니다.
서버 혹은 자료를 데일리백업 즉 일일 백업을 할경우
덮어 쓰는 방법도 있지만, 해당 데이터의 기록을 남기기 위하여
해당 일자의 폴더를 만들어 백업을 하는 경우가 있습니다.
그럼 간단하게 date -1 해서 폴더를 생성 하면 될듯 하지만
현실은 그렇지 않습니다.
이유는 2월 이라는 변수가 우리에게는 있기 때문이죠
2월은 26일인 날부터 28일인 날까지 매년 변동이 있기 때문에
배치파일 을 통한 백업을 자동화 시키는 마당에
매년 새로이 배치파일을 만들수는 없기 때문이죠
그래서 다음과 같은 배치파일을 만들어야 합니다.
@ECHO OFF
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
IF NOT [%1]==[] GOTO Syntax
SETLOCAL ENABLEDELAYEDEXPANSION
CALL :DateFormat
IF %iDate%==0 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET LocalFormat=MM%sDate%DD%sDate%YYYY
SET tLocal=%%tMonth%%%sDate%%%tDay%%%sDate%%%tYear%%
SET yLocal=%%yMonth%%%sDate%%%yDay%%%sDate%%%yYear%%
SET Year=%%C
SET Month=%%A
SET Day=%%B
)
IF %iDate%==1 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET LocalFormat=DD%sDate%MM%sDate%YYYY
SET tLocal=%%tDay%%%sDate%%%tMonth%%%sDate%%%tYear%%
SET yLocal=%%yDay%%%sDate%%%yMonth%%%sDate%%%yYear%%
SET Year=%%C
SET Month=%%B
SET Day=%%A
)
IF %iDate%==2 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET LocalFormat=YYYY%sDate%MM%sDate%DD
SET tLocal=%%tYear%%%sDate%%%tMonth%%%sDate%%%tDay%%
SET yLocal=%%yYear%%%sDate%%%yMonth%%%sDate%%%yDay%%
SET Year=%%A
SET Month=%%B
SET Day=%%C
)
FOR %%A IN (%Year%) DO SET Year=%%A
FOR %%A IN (%Month%) DO SET Month=%%A
FOR %%A IN (%Day%) DO SET Day=%%A
SET SortDate=%Year%%Month%%Day%
FOR %%A IN (%Date%) DO SET Today=%%A
IF "%Day:~0,1%"=="0" SET Day=%Day:~1%
IF "%Month:~0,1%"=="0" SET Month=%Month:~1%
CALL :JDate %Year% %Month% %Day%
SET /A JDate -= 1
CALL :GDate %JDate%
FOR /F "tokens=1-3" %%A IN ('ECHO %GDate%') DO (
SET yYear=%%A
SET yMonth=%%B
SET yDay=%%C
)
SET /A JDate += 2
CALL :GDate %JDate%
FOR /F "tokens=1-3" %%A IN ('ECHO %GDate%') DO (
SET tYear=%%A
SET tMonth=%%B
SET tDay=%%C
)
IF 1%tDay% LSS 20 SET tDay=0%tDay%
IF 1%yDay% LSS 20 SET yDay=0%yDay%
IF 1%tMonth% LSS 20 SET tMonth=0%tMonth%
IF 1%yMonth% LSS 20 SET yMonth=0%yMonth%
SET SortTom=%tYear%%tMonth%%tDay%
SET SortYest=%yYear%%yMonth%%yDay%
SET yyyy=%yYear%
SET mm=%yMonth%
SET dd=%yDay%
SET dt=%yyyy%-%mm%-%dd%
IF NOT EXIST "\\123.456.78.9\L\log\security\%dt%\" MD "\\123.456.78.9\L\log\security\%dt%\"
rem : 원본데이터 및 폴더 생성할 경로 설정
cd "\\123.456.78.9\L\log\security\%date:~10,4%-%date:~4,2%\"
rem : 생성 폴더 확인 및 폴더 로의 이동
rem : %date:~10,4%-%date:~4,2% : xxxx.xx.xx 중에 해당 월 일 의 데이터만 추려 오는 함수
xcopy /Y "C:\Security-%dt%-*.*" ""\\123.456.78.9\L\log\security\%dt%\""
rem : 해당 데이터를 xcopy 로 복사
:: ENDLOCAL&SET Yesterday=%SortYest%&SET Today=%SortDate%&SET Tomorrow=%SortTom%
:: GOTO:EOF
:DateFormat
REG.EXE /? 2>&1 | FIND "REG QUERY" >NUL
IF ERRORLEVEL 1 (
CALL :DateFormatRegEdit
) ELSE (
CALL :DateFormatReg
)
GOTO:EOF
:DateFormatReg
FOR /F "tokens=1-3" %%A IN ('REG Query "HKCU\Control Panel\International" ^| FINDSTR /R /C:"[is]Date"') DO (
IF "%%~A"=="REG_SZ" (
SET %%~B=%%~C
) ELSE (
SET %%~A=%%~C
)
)
GOTO:EOF
:DateFormatRegEdit
START /W REGEDIT /E %TEMP%.\_TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "iDate"') DO SET iDate=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "sDate"') DO SET sDate=%%B
DEL %TEMP%.\_TEMP.REG
SET iDate=%iDate:"=%
SET sDate=%sDate:"=%
GOTO:EOF
:GDate
SET /A P = %1 + 68569
SET /A Q = 4 * %P% / 146097
SET /A R = %P% - ( 146097 * %Q% +3 ) / 4
SET /A S = 4000 * ( %R% + 1 ) / 1461001
SET /A T = %R% - 1461 * %S% / 4 + 31
SET /A U = 80 * %T% / 2447
SET /A V = %U% / 11
SET /A GYear = 100 * ( %Q% - 49 ) + %S% + %V%
SET /A GMonth = %U% + 2 - 12 * %V%
SET /A GDay = %T% - 2447 * %U% / 80
FOR %%A IN (P Q R S T U V) DO SET %%A=
IF 1%GMonth% LSS 20 SET GMonth=0%GMonth%
IF 1%GDay% LSS 20 SET GDay=0%GDay%
SET GDate=%GYear% %GMonth% %GDay%
GOTO:EOF
:JDate
SET /A Month1 = ( %2 - 14 ) / 12
SET /A Year1 = %1 + 4800
SET /A JDate = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %2 - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %3 - 32075
FOR %%A IN (Month1 Year1) DO SET %%A=
GOTO:EOF
:UpCase
SET UpCase=%1
SET UpCase=%UpCase:a=A%
SET UpCase=%UpCase:b=B%
SET UpCase=%UpCase:c=C%
SET UpCase=%UpCase:d=D%
SET UpCase=%UpCase:e=E%
SET UpCase=%UpCase:f=F%
SET UpCase=%UpCase:g=G%
SET UpCase=%UpCase:h=H%
SET UpCase=%UpCase:i=I%
SET UpCase=%UpCase:j=J%
SET UpCase=%UpCase:k=K%
SET UpCase=%UpCase:l=L%
SET UpCase=%UpCase:m=M%
SET UpCase=%UpCase:n=N%
SET UpCase=%UpCase:o=O%
SET UpCase=%UpCase:p=P%
SET UpCase=%UpCase:q=Q%
SET UpCase=%UpCase:r=R%
SET UpCase=%UpCase:s=S%
SET UpCase=%UpCase:t=T%
SET UpCase=%UpCase:u=U%
SET UpCase=%UpCase:v=V%
SET UpCase=%UpCase:w=W%
SET UpCase=%UpCase:x=X%
SET UpCase=%UpCase:y=Y%
SET UpCase=%UpCase:z=Z%
GOTO:EOF
:Syntax
IF "%OS%"=="Windows_NT" CALL :UpCase %~n0
IF "%OS%"=="Windows_NT" ECHO Usage: %UpCase%
IF NOT "%OS%"=="Windows_NT" ECHO Usage: %0
위와 같은 파일을 작성 해서 배치파일을 실행 시켜 주시면 됩니다.
여기 안에 있는 내용들만 수정해서요
중간에 있는 set 함수를 사용하여 선언 해준 내용들도 본인의 설정 혹은 상황에 맞게
변경 해주시면 됩니다.
참고로 위 bat 함수는 영문 윈도우 에서 사용하기 위하여 작성 되었습니다.
윈도우 가 한글인 윈도우에서는%date:~10,4%-%date:~4,2% 이부분을 꼭 변경 해주셔야 합니다.
영문 윈도우 에서는 dd-mm-yyyy 형식으로 나오기 때문에 위와 같이 날자를 잘라서 사용 하였지만,
한글 윈도우에서는 YYYY-MM-DD 형식이기에 본인이 원하는 날자대로 안나올수 있습니다.
배치파일 통한 일일 백업과 폴더 자동생성은 분명히 편안한 작업임에는 틀림없습니다.
하지만, 배치 파일을 적용 시키기 이전에 먼저 테스트를 하는 습관은 필수 이며,
파일이 잘돌아 갔는지에 대한 로그 확인 또한 필수 입니다.
자신의 작업에 대한 확신과 믿음은 좋으나, 과신하지는 않기바랍니다.
감사합니다.
'IT > Windows' 카테고리의 다른 글
윈도우 DSP? FPP? 라이선스 종류 (0) | 2019.11.03 |
---|---|
iso 파일 실행/열기/마운트 방법 (0) | 2019.03.22 |
배치파일/연산자/쉘 스크립트 동의어/장치 연산자 (0) | 2019.03.20 |
배치파일 명령어/배치파일 명령어모음 (0) | 2019.03.19 |
배치파일 만들기/bat 파일 만들기 (0) | 2019.03.18 |