Suppression fichier

Suppression fichier - Shell/Batch - Programmation

Marsh Posté le 17-09-2010 à 10:40:53    

Bonjour à tous,
 
Voici mon programme. Il est presque fini, il me manque qu’une petite commande et j’ai besoin de votre aide.
 
J’ai des fichiers avec l’extension .bak que je dois supprimer. J’aimerais aussi créer un fichier d’archive me disant qu’est ce qui a été supprimé et quand.
 
Tout ça fonctionne j’aimerais juste ajouter dans ce fichier (un txt tout bête) la taille de mon fichier avant la suppression et la taille après suppression.
 
Voici le code :
 
 
@echo off
color 3f
echo.
echo.
echo.
echo ------    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿    ------
echo ------    ³                                                         ³    ------
echo ------    ³                                                         ³    ------
echo ------    ³ BIENVENUE DANS LE PROGRAMME DE SUPPRESSION DES FICHIERS ³    ------
echo ------    ³                        BAK                              ³    ------
echo ------    ³                                                         ³    ------
echo ------    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ    ------
echo.
echo.
 
echo.------ >> Historiquebak.txt
echo.------ >> Historiquebak.txt
echo ------    ³        [-[ DATE : %date% %time% ]-]            ³    ------ >> Historiquebak.txt
pause
echo.------ >> Historiquebak.txt
echo.------ >> Historiquebak.txt
echo.
echo.
ECHO VOULEZ VOUS SUPPRIMER LES FICHIERS BAK PRESENT DANS CE REPERTOIRE ?
echo.
ECHO 1) OUI
echo.
ECHO 2) NON
ECHO.
rem variable d'environnement (paramètre /P obligatoir)
set /p choix= VEUILLEZ ENTRER UN CHOIX S IL VOUS PLAIT (1 ou 2) :
 
if not %choix%=='' set choix=%choix:~0,1%
if %choix%==1 goto OUI
if %choix%==2 goto NON
 
retour au menu principale a cause d'un mauvais choix ou une faute de frappe
echo %choix% N EST PAS CORRECT !
goto menu
 
 
:OUI
 
del /s *.bak >> Historiquebak.txt
 
:NON
exit
 
 
 
Et voici le fichier txt créer
 
------  
------  
------    ³        [-[ DATE : 17/09/2010 10:39:31,61 ]-]            ³    ------  
------  
------  
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de nouveau dossier\gdfgd.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de nouveau dossier\Nouveau dossier\fdgdf.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de nouveau dossier\Nouveau dossier\Nouveau dossier\fdsfsd.bak
 
Il me faudrait juste apres la date la taille du repertoire source et à la fin la taille apres suppression.
 
J'espere que vous pourrez m'aider. Merci d'avance

Reply

Marsh Posté le 17-09-2010 à 10:40:53   

Reply

Marsh Posté le 17-09-2010 à 15:14:56    

Tu peux ajouter :


echo "Répertoire avant suppressions : >> Historiquebak.txt
dir | find "fichier(s)" >> Historiquebak.txt


 
Jean-Pierre.

Reply

Marsh Posté le 17-09-2010 à 16:30:08    

Ca me semble pas mal du tout je vais faire le test et je te tiens informé. Merci

Reply

Marsh Posté le 17-09-2010 à 16:38:19    

Voila je viens de tester et ça fonctionne très bien
 
------    ³        [-[ DATE : 17/09/2010 16:36:20,89 ]-]            ³    ------  
 
 
REPERTOIRE AVANT SUPPRESSION :  
 
               4 fichier(s)        1ÿ776ÿ345 octets
 
 
 
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de Copie de Copie de nouveau dossier\gdfgd.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de Copie de Copie de nouveau dossier\Pa50SD_os_v101.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de Copie de Copie de nouveau dossier\Nouveau dossier\fdgdf.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de Copie de Copie de nouveau dossier\Nouveau dossier\Plastur' J.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de Copie de Copie de nouveau dossier\Nouveau dossier\Nouveau dossier\fdsfsd.bak
Fichier supprim‚ - C:\Users\C\Desktop\Copie de Copie de Copie de Copie de Copie de nouveau dossier\Nouveau dossier\Nouveau dossier\PCM AGP 07JUILL10.bak
 
REPERTOIRE APRES SUPPRESSION :  
 
               2 fichier(s)            3ÿ537 octets
 
 
-------------------------------------------------------------------------------------------------------------------------  
 
Juste pour chipoter (1ÿ776ÿ345 octets) on ne peut pas l'avoir mieux (genre en Mo) ou éviter le ÿ....... ?  
 
Encore merci pour l'aide

Reply

Marsh Posté le 20-09-2010 à 10:54:30    

Le caractère ÿ est le séparateur de milliers, je ne sais pas trop comment tu obtiens ça (à l'affichage c'est un espace).
Tu peux le supprimer en ajoutant l'option /-C à ta commande DIR.
 
Par contre je n'ai pas de solution (simple) pour l'affichage en Mo
 
 
Jean-Pierre.

Reply

Marsh Posté le 20-09-2010 à 11:16:22    

Parfait ça fonctionne super bien. Merci beaucoup. Je te pose juste la question mais toujours pareil c'est pour chipotter ^^. Si tu sais ca n'a pas d'importance car j'ai deja mis en fonction le programme.
 
La taille m'est donnée que pour le repertoire racine est-ce qu'il y aurait une commande pour avoir aussi la taille des sous repertoire présent dans celui-ci ?
 
Encore mille merci

Reply

Marsh Posté le 20-09-2010 à 11:36:05    

Pour avoir la taille totale sous-répertoires compris, il faut ajouter l'option /S à la commande DIR.
L'inconvénient est que tu vas afficher les infos pour tous les répertoires , par exemple :

U:\TEMP>DIR /S /-C | FIND "fichier(s)"
             111 fichier(s)         20379032 octets
               1 fichier(s)              493 octets
               1 fichier(s)              453 octets
               1 fichier(s)              453 octets
               0 fichier(s)                0 octets
               0 fichier(s)                0 octets
               3 fichier(s)             6680 octets
               0 fichier(s)                0 octets
               2 fichier(s)              548 octets
               1 fichier(s)              535 octets
               0 fichier(s)                0 octets
               0 fichier(s)                0 octets
               4 fichier(s)               96 octets
              24 fichier(s)          6357981 octets
               4 fichier(s)          5433162 octets
               0 fichier(s)                0 octets
               0 fichier(s)                0 octets
               2 fichier(s)            50887 octets
               3 fichier(s)             1504 octets
               0 fichier(s)                0 octets
               1 fichier(s)                5 octets
               0 fichier(s)                0 octets
               0 fichier(s)                0 octets
               6 fichier(s)            74169 octets
               8 fichier(s)            99276 octets
               6 fichier(s)               36 octets
               5 fichier(s)               30 octets
             183 fichier(s)         32405340 octets


J'ai écrit un petit sous-programme qui affiche le résultat global en octets, Ko ou Mo suivant la taille :

CALL :PrintDirInfos U:\TEMP
GOTO :EOF
 
:PrintDirInfos
   SETLOCAL
   SET dir=%~f1
   FOR /F "tokens=1-4" %%i IN ('CMD /C "DIR /-C /S %dir% | FINDstr fichier"') DO (
      SET nb=%%i
      SET taille=%%k
   )
   SET t=%taille%
   SET unit=octet(s)
   IF %taille% GEQ 1048576 (
      SET /A "t=(%taille%+524288)/1048576"
      SET unit=Mo
   ) ELSE IF %taille% GEQ 1024 (
      SET /A "t=(%taille%+512)/1024"
      SET unit=Ko
   )
   ECHO %nb% fichier(s) %t% %unit%
   
   GOTO :EOF    

Le résultat est :

183 fichier(s) 31 Mo


 
Jean-Pierre.

Reply

Marsh Posté le 20-09-2010 à 12:00:39    

Ah excellent la commande S. Par contre le sous programme je suis paumé je sais pas comment l'intégrer. Voici a quoi ressemble le mien avec les modifs:
 
echo.
echo. >> Historiquebak.txt
echo.>> Historiquebak.txt
echo ------    ³        [-[ DATE : %date% %time% ]-]            ³    ------ >> Historiquebak.txt
echo. >> Historiquebak.txt
echo. >> Historiquebak.txt
echo REPERTOIRE AVANT SUPPRESSION : >> Historiquebak.txt
echo. >> Historiquebak.txt
dir / S /-C| find "fichier(s)" >> Historiquebak.txt  
pause
echo. >> Historiquebak.txt
echo. >> Historiquebak.txt
echo.
echo.
ECHO VOULEZ VOUS SUPPRIMER LES FICHIERS BAK PRESENT DANS CE REPERTOIRE ?
echo.
ECHO 1) OUI
echo.
ECHO 2) NON
ECHO.
rem variable d'environnement (paramètre /P obligatoir)
set /p choix= VEUILLEZ ENTRER UN CHOIX S IL VOUS PLAIT (1 ou 2) :
 
if not %choix%=='' set choix=%choix:~0,1%
if %choix%==1 goto OUI
if %choix%==2 goto NON
 
retour au menu principale a cause d'un mauvais choix ou une faute de frappe
echo %choix% N EST PAS CORRECT !
goto menu
 
 
:OUI
echo. >> Historiquebak.txt
 
del /s *.bak >> Historiquebak.txt
echo.>> Historiquebak.txt
echo REPERTOIRE APRES SUPPRESSION : >> Historiquebak.txt
echo. >> Historiquebak.txt
dir /S /-C| find "fichier(s)" >> Historiquebak.txt  
echo.>> Historiquebak.txt
echo.>> Historiquebak.txt
echo ------------------------------------------------------------------------------------------------------------------------- >> Historiquebak.txt
echo.>> Historiquebak.txt
:NON
exit
 
En tout les cas encore merci tu m'auras beaucoup aidé.

Reply

Marsh Posté le 20-09-2010 à 13:31:21    

Ton code avec l'utilisation de mon sous-programme :

echo.
echo. >> Historiquebak.txt
echo.>> Historiquebak.txt
echo ------    ³        [-[ DATE : %date% %time% ]-]            ³    ------ >> Historiquebak.txt
echo. >> Historiquebak.txt
echo. >> Historiquebak.txt
echo REPERTOIRE AVANT SUPPRESSION : >> Historiquebak.txt
echo. >> Historiquebak.txt
 
CALL :PrintDirInfos >> Historiquebak.txt  
 
pause
echo. >> Historiquebak.txt
echo. >> Historiquebak.txt
echo.
echo.
ECHO VOULEZ VOUS SUPPRIMER LES FICHIERS BAK PRESENT DANS CE REPERTOIRE ?
echo.
ECHO 1) OUI
echo.
ECHO 2) NON
ECHO.
rem variable d'environnement (paramètre /P obligatoir)
set /p choix= VEUILLEZ ENTRER UN CHOIX S IL VOUS PLAIT (1 ou 2) :
 
if not %choix%=='' set choix=%choix:~0,1%
if %choix%==1 goto OUI
if %choix%==2 goto NON
 
retour au menu principale a cause d'un mauvais choix ou une faute de frappe
echo %choix% N EST PAS CORRECT !
goto menu
 
 
:OUI
echo. >> Historiquebak.txt
 
del /s *.bak >> Historiquebak.txt
echo.>> Historiquebak.txt
echo REPERTOIRE APRES SUPPRESSION : >> Historiquebak.txt
echo. >> Historiquebak.txt
 
CALL :PrintDirInfos >> Historiquebak.txt  
 
echo.>> Historiquebak.txt
echo.>> Historiquebak.txt
echo ------------------------------------------------------------------------------------------------------------------------- >> Historiquebak.txt
echo.>> Historiquebak.txt
:NON
exit  
 
:PrintDirInfos
   SETLOCAL
   SET dir=%~f1
   FOR /F "tokens=1-4" %%i IN ('CMD /C "DIR /-C /S %dir% | FINDstr fichier"') DO (
      SET nb=%%i
      SET taille=%%k
   )
   SET t=%taille%
   SET unit=octet(s)
   IF %taille% GEQ 1048576 (
      SET /A "t=(%taille%+524288)/1048576"
      SET unit=Mo
   ) ELSE IF %taille% GEQ 1024 (
      SET /A "t=(%taille%+512)/1024"
      SET unit=Ko
   )
   ECHO %nb% fichier(s) %t% %unit%
   
   GOTO :EOF    


 
Une petite astuce pour plus de clarté pour une suite de commandes dont la sortie est à rediriger dans un fichier :
Le code suivant :

echo. >> Historiquebak.txt
echo.>> Historiquebak.txt
echo ------    ³        [-[ DATE : %date% %time% ]-]            ³    ------ >> Historiquebak.txt
echo. >> Historiquebak.txt
echo. >> Historiquebak.txt
echo REPERTOIRE AVANT SUPPRESSION : >> Historiquebak.txt
echo. >> Historiquebak.txt
 
CALL :PrintDirInfos >> Historiquebak.txt  
 
pause
echo. >> Historiquebak.txt
echo. >> Historiquebak.txt

peut être ecrit :

(
   echo.  
   echo.
   echo ------    ³        [-[ DATE : %date% %time% ]-]            ³    ------
   echo.  
   echo.  
   echo REPERTOIRE AVANT SUPPRESSION :  
   echo.  
 
   CALL :PrintDirInfos  
 
   pause 1>&3
   echo.  
   echo.  
) >> Historiquebak.txt


 
Jean-Pierre.

Reply

Marsh Posté le 20-09-2010 à 21:22:53    

Mille merci pour toutes ton aide voici un programme parfait et surtout merci pour les tuyaux.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed