eine Batchdatei erstellen einen bestimmten Ordner zu sichern
-
16-09-2019 - |
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.
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