폴더 백업 작업 자동화(압축, 이동 후 명명 규칙에 따라 이름 바꾸기)

폴더 백업 작업 자동화(압축, 이동 후 명명 규칙에 따라 이름 바꾸기)

Windows 2003 R2 서버에서 폴더 백업을 자동화하려고 합니다(현재 수동 프로세스).

이 작업에는 세 가지 구성 요소가 있습니다.

1) 타사 소프트웨어를 사용하지 않고 동일한 디렉터리에 다음 폴더의 zip 파일을 생성합니다.

d:\source\folder_to_back_up

이는 우리에게 다음을 제공합니다.

d:\source\folder_to_back_up.zip

2) 새로 생성된 zip 파일을 다음 위치로 이동합니다.

d:\destination

3) 다음 명명 규칙에 따라 zip 파일의 이름을 바꿉니다.

Backup_YYYYMMDD.zip

예를 들어, 오늘 날짜를 사용하면 이름은 다음과 같습니다.

Backup_20150516.zip

지금까지 2단계를 자동화하는 방법을 알아냈습니다.

robocopy /mov d:\source d:\destination folder_to_back_up.zip

...하지만 zip 파일 생성과 이름 바꾸기 단계를 자동화하는 데 도움이 필요합니다.

어떤 아이디어라도 대단히 감사하겠습니다!

답변1

다른 답변의 의견에서 7-zip을 고려하기 시작했기 때문에 제가 한 방법은 다음과 같습니다.

set SOURCE=d:\source\folder_to_back_up
set DEST=d:\destination
rem # a: Add, -mx: compression level 0-9, -tzip use ZIP format, -ssc: case sensitive, -ssw: add files opened for writing, -r: recursive
pushd "%SOURCE%" && 7za a -mx9 -tzip -ssc -ssw -r "%DEST%\Backup_%date%.zip" & popd

소스 및 대상 변수를 인라인하는 경우 이는 본질적으로 한 줄짜리입니다. pushd/ 쌍 은 popd한 배치에서 여러 백업을 수행하는 경우 컨텍스트가 변경되지 않도록 하기 위해 존재합니다. %date%내장되어 있습니다.

적절한 도구 없이 특별한 파일 형식(zip)을 만드는 것은 합리적이지 않다고 생각합니다. 이는 JDK 없이 Java 소스 코드를 jar로 컴파일하려는 것과 같습니다.

종속성

위의 코드를 삽입하고 이름이 지정된 해당 파일 옆에 backup_stuff.bat복사하여 도구 삭제 문제를 해결할 수 있습니다. 그런 다음 해당 파일을 정확히 참조하려면 로 바꾸면 됩니다 . 이는 여기에 외부 종속성이 있다는 메시지를 전달해야 합니다.7za.exebackup_stuff.bat-7za.exe7za%~dp0\backup_stuff.bat-7za

또는 편집증이 심해지고 싶다면 배치 파일에 7zip을 삽입하면 됩니다. :)

set SOURCE=d:\source\folder_to_back_up
set DEST=d:\destination

goto deps

:exec
pushd "%SOURCE%" && "%TEMP%\7za" a -mx9 -tzip -ssc -ssw -r "%DEST%\Backup_%date%.zip" & popd
goto end

:deps
@(
rem This is the Base64 enconded version of 7za.exe
rem To create this section execute the following commands:
rem certutil -encode 7za.exe 7za.exe.b64
rem echo @echo off>7za.exe.b64.bat && for /F "tokens=*" %L in (7za.exe.b64) do @echo echo %L>>7za.exe.b64.bat

echo -----BEGIN CERTIFICATE-----
echo TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
echo AAAAAAAAAAAAAAAA+AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
echo dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAB9EXJSOXAcATlwHAE5cBwB
echo QmwQATtwHAG6bBIBIHAcAQ9WFgFbcBwBt3hDAThwHAE5cB0BlnAcAbp4QQE+cBwB

rem ... lot of lines ommitted for sake of stackoverflow

echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
echo -----END CERTIFICATE-----
)>%TEMP%\7za.exe.b64
certutil -decode -f %TEMP%\7za.exe.b64 %TEMP%\7za.exe >NUL

goto exec

:end

원본 7-zip v9.20 exe ​​파일로 이 작업을 수행하려고 하면 내 cmd가 충돌했습니다. 블록 길이에 제한이 있는 것 같습니다 (...). 대략 370kB(b64의 약 5000줄) 정도인 것으로 나타났습니다. 7-zip의 원래 base64는 800kB였지만 큰 문제는 아닙니다. @(...)>>target.file한도 미만인 여러 블록으로 분할될 수 있기 때문입니다. 그러나 나는 upx --brute 7za.exeexe 파일의 크기를 300kB 미만으로 만드는 방법을 제안합니다 .

출처

답변2

배치 파일에서 zip 파일을 만들 수 있습니다. 이 작업은 Microsoft Windows의 Shell.Application 소프트웨어 코드를 사용하여 수행할 수 있으며 명령줄을 사용하여 수행할 수도 있지만 몇 가지 추가 코드가 필요합니다. 예:user2868186의 질문에 대한 Ansgar Wiechers의 답변단단해 보이는 코드(하단 근처)가 포함되어 있습니다. 대안으로,VBS의 Rob Vanderwoude 페이지해결책도 보여줍니다.

8~12줄(추정량)의 VBScript가 필요하다는 생각이 마음에 들지 않을 수도 있습니다. 음, 이것이 MS Windows에 추가된 최소한의 코드에 의존하면서 작업을 자동화할 수 있는 가장 좋은 방법입니다. 나는 MS Windows(적어도 당신이 요구하는 버전은 아님)가 더 적은 코드로 이를 수행할 수 있는 방법을 제공했다고 생각하지 않습니다.

그러나 해당 코드를 정기적으로 추가하려는 경우에는 두 번 이상 입력하기보다는 다운로드하는 것이 좋습니다. 그리고 다운로드하는 경우 7-Zip이나 Info-Zip과 같은 다른 코드를 다운로드하는 것이 좋습니다. 7-Zip을 명령줄에서 사용하는 방법을 배우려면 시간이 더 걸릴 수 있지만 성공했습니다. 그리고 이 작업을 두 번 이상 수행하지 않을 경우 소프트웨어를 한 번 추가하는 것이 장기적으로(최소 시간 투자, 장기적 보상) 좋은 솔루션이 될 수 있는 또 다른 이유일 것입니다. 나는 그러한 소프트웨어를 사용하는 것이 귀하가 요청한 것과 정확히 일치하지 않는다는 것을 이해합니다. 그러나 그것이 최선의 해결책이 될지 진지하게 고려해볼 것을 제안하기 때문에 어쨌든 그 점을 언급하는 것입니다.

세 번째 단계와 관련하여 배치 파일에 다음을 배치하십시오.
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b) echo %mydate% 표시된 FOR 명령은 배치 파일에서 실행되도록 되어 있습니다. 배치 파일 외부에서 똑같은 명령을 실행하려고 시도해도 작동하지 않습니다. Win7 SP1에서 테스트했습니다. 나는 그것을 테스트할 편리한 2003 R2 서버를 가지고 있지 않지만 이 접근 방식이 당신에게 잘 맞을 것이라고 추측합니다.

나는 이로써 신용을 얻었다시간에 관한 로리의 질문에 대한 제이의 답변이 접근 방식의 기초가 됩니다.

관련 정보