2009-09-24 15 views
1

Je suis en fait assez nouveau à ce fichier batch. Je sais qu'il est important de connaître au moins les commandes de base. Comment est-ce que je fais ce qui suit?Création d'un fichier batch pour sauvegarder un dossier spécifié

  • Compresser un dossier spécifié.
  • Déplacez le dossier vers un autre emplacement.
  • Lors du zippage, le nom du fichier ZIP sera la date actuelle 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 en tant que logiciel d'archivage.

+1

Le commentaire que * vous n'avez pas le temps * est légèrement provocateur, mais je n'ai pas le temps de répondre. – pavium

+0

@pavium: Désolé sensei :( – Tarik

Répondre

4

Le script de traitement par lots ci-dessous va le faire (je l'ai testé et cela fonctionne aux spécifications). Le répertoire à zip et move est spécifié comme son 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 des répertoires entiers (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 où placer les fichiers compressés dans est spécifié comme ZIPDIR.

L'emplacement de 7-Zip est configuré via SEVENZIP_EXE.

Notez également que l'obtention de la date actuelle dans le format requis dépend du format de date courte dans les paramètres régionaux . J'ai énuméré trois versions différentes pour ISO-8601, Europe centrale et aux États-Unis. L'actif dans la liste est pour les États-Unis (la ligne "set FDATE ="). Si un différent est nécessaire, il suffit de copier-coller à partir de l'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 
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 
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 
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 
+0

Merci beaucoup. – Tarik