Frage

Ich bin eigentlich ziemlich neu in diese Batchdatei Sache. Ich weiß, es ist wichtig, zumindest die grundlegenden Befehle zu kennen. Wie mache ich die folgende?

  • einen bestimmten Ordner Zipping.
  • Bewegen Sie den Ordner an einem anderen Ort.
  • Wenn es zippen, der ZIP-Dateiname wird das aktuelle Datum und wenn es eine andere ZIP-Datei mit dem gleichen Namen, soll es wie 20090924-2 genannt werden.

PS : 7-Zip installiert ist Computer als Archiv-Software.

War es hilfreich?

Lösung

Der Batch-Skript unten aufgeführt wird es tun (ich habe es getestet und es funktioniert auf Spezifikationen). Das Verzeichnis zip und Bewegung wird als das übergeordnete Verzeichnis angegeben und Namen das Verzeichnis (PARENT_FOLDERTOZIP und FOLDERTOZIP in der Anfang) - ich kann nicht herausfinden, wie ganze kopieren Verzeichnisse (glaube ich XCOPY nur Inhalte kopieren Verzeichnisse und Unterverzeichnisse.). Die Kopie Lage ist angegeben als FOLDERTARGETLOCATION und das Verzeichnis zu platzieren die komprimierten Dateien in als ZIPDIR angegeben.

Die Position von 7-Zip ist konfiguriert durch SEVENZIP_EXE.

Beachten Sie auch, dass immer das aktuelle Datum in dem erforderlichen Format ist abhängig von dem kurzen Datumsformat in der Region die Einstellungen. Ich habe drei verschiedene Versionen aufgeführt für ISO-8601, mitteleuropäische und U. S. A. Die aktive in dem Auflistung ist für die USA ( „set FDATE =“ Zeile). Wenn ein anderes benötigt wird, um dann nur von einem der copy-paste beiden anderen.

Das heißt es wird darauf hingewiesen, dass diese Art der Sache viel ist leichter mit Perl , Python oder 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top