문제

나는 실제로이 배치 파일에 익숙하지 않습니다. 적어도 기본 명령을 아는 것이 중요하다는 것을 알고 있습니다. 다음은 어떻게합니까?

  • 지정된 폴더를 ZIPPING합니다.
  • 폴더를 다른 장소로 이동하십시오.
  • ZIPPING에서 ZIP 파일 이름은 현재 날짜가되며 동일한 이름을 가진 다른 ZIPPENT 파일이 있으면 20090924-2와 같이 이름을 지정해야합니다.

추신: 7-zip 내 컴퓨터에 아카이브 소프트웨어로 설치됩니다.

도움이 되었습니까?

해결책

아래에 나열된 배치 스크립트가 수행됩니다 (테스트했으며 사양에 맞게 작동합니다). Zip and Move 로의 디렉토리는 부모 디렉토리와 디렉토리의 이름으로 지정되어 있습니다 (처음에는 parent_foldertozip 및 foldertozip) - 전체 디렉토리를 복사하는 방법을 알 수 없었습니다 (Xcopy가 디렉토리의 콘텐츠 만 복사 할 수 있다고 생각합니다. -디렉터.). 복사 위치는 FolderTargetLocation으로 지정되며 압축 파일을 배치하는 디렉토리는 Zipdir로 지정됩니다.

7-zip의 위치는 Sevenzip_exe를 통해 구성됩니다.

필요한 형식으로 현재 날짜를 얻는 것은 지역 설정의 짧은 날짜 형식에 따라 다릅니다. ISO-8601, 중부 유럽 및 미국에 대한 세 가지 버전을 나열했습니다.이 버전은 미국을위한 것입니다 ( "Set FDATE ="라인). 다른 것이 필요하다면 다른 두 가지 중 하나에서 페이스트를 복사하십시오.

그것은 이런 종류의 일이 훨씬 쉽다는 점에 주목해야한다고 말했습니다. , 파이썬 또는 PowerShell.


@echo off
@title=Folder zip and move...

rem Parameters
  rem Folder to zip and move
    set PARENT_FOLDERTOZIP=T:\to delete
    set FOLDERTOZIP=Folder to Compress

  rem Target folder for moving the input folder to.
    set FOLDERTARGETLOCATION=s:\move Here

  rem Where to place compressed folders
    set ZIPDIR=D:\toDelete\2009-09-24a


rem Configuration
  set SEVENZIP_EXE=D:\Program Files\7-Zip\7z.exe


rem =================== Date ==============================================
rem There is no universal way inside batch itself to get a
rem date that is independent of regional settings (but is
rem quite trivial if an external program or script
rem (Perl/Python) is available).
rem
rem For short date formats:
rem
rem   -------------------------------------------------------
rem
rem   ISO-8601:
rem     0123456789
rem     yyyy-MM-dd/     E.g.: 2009-09-24
rem
rem     set FDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
rem
rem   -------------------------------------------------------
rem
rem   Central european:
rem     0123456789
rem     dd/MM/yyyy     E.g.: 24/09/2009
rem
rem     set FDATE=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
rem
rem   -------------------------------------------------------
rem
rem   US:
rem
rem     0123456789
rem     MM/dd/yyyy     E.g.: 09/24/2009
rem
rem     set FDATE=%DATE:~6,4%%DATE:~0,2%%DATE:~3,2%

set FDATE=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
set ZIPFILE=%ZIPDIR%\%FDATE%.7z

set FOLDERTOZIP_FULLPATH=%PARENT_FOLDERTOZIP%\%FOLDERTOZIP%
mkdir %FOLDERTARGETLOCATION%


rem Does a zip file already exist?
if exist "%ZIPFILE%" GOTO L_ZIPFILE_EXISTS
GOTO L_ZIPFILENAME_OK


rem Find a compressed file that does not already exist.
:L_ZIPFILE_EXISTS
set RNUM=0
:L_TRYANOTHER
set /a RNUM=%RNUM% + 1
set ZIPFILE=%ZIPDIR%\%FDATE%-%RNUM%.7z
echo Candidate: %ZIPFILE% ...
if exist "%ZIPFILE%" GOTO L_TRYANOTHER


rem Zip the folder!
:L_ZIPFILENAME_OK
"%SEVENZIP_EXE%"  a %ZIPFILE%   "%FOLDERTOZIP_FULLPATH%"

if exist "%ZIPFILE%" GOTO L_OKZIP
GOTO L_ERROREND


:L_OKZIP
rem Move folder: copy, then delete source.
set DEST_FOLDER=%FOLDERTARGETLOCATION%\%FOLDERTOZIP%
mkdir "%DEST_FOLDER%"
xcopy /Y /S "%FOLDERTOZIP_FULLPATH%"\*.*   "%DEST_FOLDER%"\
rmdir /S "%FOLDERTOZIP_FULLPATH%"
GOTO L_END


:L_ERROREND
echo 7-Zipping failed !!!


:L_END

pause
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top