Création d'un fichier batch pour sauvegarder un dossier spécifié
-
16-09-2019 - |
Question
Je suis en fait assez nouveau à cette chose fichier batch. Je sais qu'il est important de connaître au moins les commandes de base. Comment dois-je faire ce qui suit?
- Compresser un dossier spécifié.
- Déplacer le dossier à un autre endroit.
- Lorsque passer comme un éclair, le nom de fichier ZIP sera la date et s'il y a un autre fichier compressé avec le même nom, il devrait être nommé comme 20090924-2.
PS : 7-Zip est installé sur mon ordinateur comme un logiciel d'archivage.
La solution
Le script batch ci-dessous fera (je l'ai testé et il fonctionne selon les spécifications). Le répertoire zip et déplacement est spécifié comme répertoire parent et le nom de le répertoire (PARENT_FOLDERTOZIP et FOLDERTOZIP dans le début) - Je ne pouvais pas comprendre comment copier ensemble répertoires (je pense que XCOPY ne peut copier le contenu de répertoires et sous-répertoires.). L'emplacement de la copie est spécifié comme FOLDERTARGETLOCATION, et le répertoire pour placer les fichiers compressés en est spécifié comme ZIPDIR.
La localisation de 7-Zip est configuré par SEVENZIP_EXE.
Notez également que l'obtention de la date actuelle dans le besoin le format dépend du format de date courte dans la région paramètres. J'ai énuméré trois versions différentes pour ISO-8601, européen et U.S.A. Central celui qui est actif dans le liste est pour le U.S.A. (la ligne "set FDATE ="). Si un différent est nécessaire, alors il suffit de copier-coller à partir d'un des deux autres.
Cela dit, il convient de noter que ce genre de chose est beaucoup plus facile avec Perl , Python ou 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