Supprimer contenu répertoire sauf 1 fichier

Supprimer contenu répertoire sauf 1 fichier - Shell/Batch - Programmation

Marsh Posté le 02-07-2010 à 10:03:12    

Bonjour,
 
Je débute en script .bat et je cherche à supprimer le contenu d'un répertoire.
Le nom du répertoire où je dois supprimer les données est Share.
Il est situé sur un serveur, son emplacement est précisemment X:\Share
 
Ce que je veux faire c'est :
- supprimer tous les fichiers et répertoires, y compris les sous-répertoires, et les données incluses.
- Ne laisser qu'un seul fichier nommé A lire.txt qui est à la racine.
 
Une personne peut-elle m'aider SVP ?
Merci.

Reply

Marsh Posté le 02-07-2010 à 10:03:12   

Reply

Marsh Posté le 02-07-2010 à 10:14:52    

Tu pourrais copier "A lire.txt" dans un répertoire temporaire, tout effacer, recréer X:\Share et y remettre lire.txt


---------------
oui oui
Reply

Marsh Posté le 02-07-2010 à 10:39:46    

Salut.
Merci pour ta réponse.
Y'a pas moyen d'exclure juste ce fichier ?

Reply

Marsh Posté le 02-07-2010 à 21:27:27    

mattwarend2002 a écrit :

Y'a pas moyen d'exclure juste ce fichier ?


 
Non.
 
Ou alors tu installes l'interpréteur Python qui te permettra de programmer des algos de traitement automatisés pour zindow (ou Linux) dans lesquels cela sera possible...


Message édité par Sve@r le 02-07-2010 à 21:27:44

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 02-07-2010 à 23:12:53    

Il n'y a pas de commande miracle permettant d'effectuer ce que tu veux en une seule fois
Une solution possible est de supprimer tous les répertoires, puis tous les fichiers à l'execption de celui que tu veux conserver.
 

Code :
  1. SET Rep=.\Share
  2. SET Fic=lire.txt
  3. REM Suppression des répertoires
  4. FOR /D %%d IN (%Rep%\*) DO RMDIR /S /Q %%
  5. REM Suppression fichiers
  6. FOR %%f IN (%Rep%\*) DO (
  7.    IF  NOT "%%~nxf" == "%Fic%" DEL /F %%f
  8. )

Contenu du répertoire share :

C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>dir /S share
 Le volume dans le lecteur C s'appelle HDD
 Le numéro de série du volume est A8B3-5FE4
 
 Répertoire de C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp\share
 
02/07/2010  23:03    <REP>          .
02/07/2010  23:03    <REP>          ..
02/07/2010  22:33                 6 lire.txt
02/07/2010  22:57    <REP>          save
02/07/2010  23:02         1 155 467 upgrade.exe
02/07/2010  23:02             1 002 upgrade.ini
02/07/2010  23:03           872 027 upgrade.log
               4 fichier(s)        2 028 502 octets
 
 Répertoire de C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp\share\save
 
02/07/2010  22:57    <REP>          .
02/07/2010  22:57    <REP>          ..
02/07/2010  22:57               904 infos.dat
02/07/2010  22:33                 6 lire.txt
02/07/2010  22:33               858 session.dat
02/07/2010  22:32                 5 test.txt
               4 fichier(s)            1 773 octets
 
     Total des fichiers listés :
               8 fichier(s)        2 030 275 octets
               5 Rép(s)  77 380 145 152 octets libres
 
C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>matt.bat
C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>dir /s share
 Le volume dans le lecteur C s'appelle HDD
 Le numéro de série du volume est A8B3-5FE4
 
 Répertoire de C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp\share
 
02/07/2010  23:10    <REP>          .
02/07/2010  23:10    <REP>          ..
02/07/2010  22:33                 6 lire.txt
               1 fichier(s)                6 octets
 
     Total des fichiers listés :
               1 fichier(s)                6 octets
               2 Rép(s)  77 382 184 960 octets libres
 
C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>


 
Jean-Pierre.

Reply

Marsh Posté le 06-07-2010 à 14:05:49    

aigles a écrit :

Il n'y a pas de commande miracle permettant d'effectuer ce que tu veux en une seule fois
Une solution possible est de supprimer tous les répertoires, puis tous les fichiers à l'execption de celui que tu veux conserver.
 

Code :
  1. SET Rep=.\Share
  2. SET Fic=lire.txt
  3. REM Suppression des répertoires
  4. FOR /D %%d IN (%Rep%\*) DO RMDIR /S /Q %%
  5. REM Suppression fichiers
  6. FOR %%f IN (%Rep%\*) DO (
  7.    IF  NOT "%%~nxf" == "%Fic%" DEL /F %%f
  8. )

Contenu du répertoire share :

C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>dir /S share
 Le volume dans le lecteur C s'appelle HDD
 Le numéro de série du volume est A8B3-5FE4
 
 Répertoire de C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp\share
 
02/07/2010  23:03    <REP>          .
02/07/2010  23:03    <REP>          ..
02/07/2010  22:33                 6 lire.txt
02/07/2010  22:57    <REP>          save
02/07/2010  23:02         1 155 467 upgrade.exe
02/07/2010  23:02             1 002 upgrade.ini
02/07/2010  23:03           872 027 upgrade.log
               4 fichier(s)        2 028 502 octets
 
 Répertoire de C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp\share\save
 
02/07/2010  22:57    <REP>          .
02/07/2010  22:57    <REP>          ..
02/07/2010  22:57               904 infos.dat
02/07/2010  22:33                 6 lire.txt
02/07/2010  22:33               858 session.dat
02/07/2010  22:32                 5 test.txt
               4 fichier(s)            1 773 octets
 
     Total des fichiers listés :
               8 fichier(s)        2 030 275 octets
               5 Rép(s)  77 380 145 152 octets libres
 
C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>matt.bat
C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>dir /s share
 Le volume dans le lecteur C s'appelle HDD
 Le numéro de série du volume est A8B3-5FE4
 
 Répertoire de C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp\share
 
02/07/2010  23:10    <REP>          .
02/07/2010  23:10    <REP>          ..
02/07/2010  22:33                 6 lire.txt
               1 fichier(s)                6 octets
 
     Total des fichiers listés :
               1 fichier(s)                6 octets
               2 Rép(s)  77 382 184 960 octets libres
 
C:\Documents and Settings\Jean-Pierre\Mes documents\Tmp>


 
Jean-Pierre.


 
Bonjour,
 
Merci pour ta réponse.
Mon répertoire est situé sur un partage réseau.
Pour y accéder, je passe par la lettre de lecteur : S:\
Le chemin est donc S:\Share. (je ne peux pas supprimer le répertoire Share, il est protégé)
 
Je veux supprimer l'ensemble du contenu du répertoire, sauf le fichier A lire.txt.
J'ai essayé ton script mais ça ne fonctionne pas :
 
SET Rep=S:\Share
SET Fic=A lire.txt
REM Suppression des répertoires
FOR /D %%d IN (%Rep%\*) DO RMDIR /S /Q %%
REM Suppression fichiers
FOR %%f IN (%Rep%\*) DO (
   IF  NOT "%%~nxf" == "%Fic%" DEL /F %%f
)
 
Merci d'avance pour ton aide.

Reply

Marsh Posté le 06-07-2010 à 15:26:15    

C'est pas très précis comme indication "ça ne fonctionne pas" ...
Dans la commande FOR de suppression des répertoires, il manque le nom de la variable pour le RMDIR
J'ai essayé le script sur mon poste, le disque U: est un disque réseau; cela fonctionne.
 

Code :
  1. @ECHO OFF
  2. SET Rep=U:\Share
  3. SET Fic=lire.txt
  4. ECHO =======================
  5. ECHO Arbo avant suppressions
  6. ECHO =======================
  7. DIR /S %Rep%
  8. ECHO =======================
  9. ECHO Suppressions
  10. ECHO =======================
  11. REM Suppression des répertoires
  12. FOR /D %%d IN (%Rep%\*) DO RMDIR /S /Q %%d
  13. REM Suppression fichiers
  14. FOR %%f IN (%Rep%\*) DO (
  15.    IF  NOT "%%~nxf" == "%Fic%" DEL /F %%f
  16. )
  17. ECHO =======================
  18. ECHO Arbo apres suppressions
  19. ECHO =======================
  20. DIR /S %Rep%

L'exécution du script :

=======================
Arbo avant suppressions
=======================
 Le volume dans le lecteur U s'appelle Data
 Le numéro de série du volume est 7404-6451
 
 Répertoire de U:\Share
 
06/07/2010  15:20    <REP>          .
06/07/2010  15:20    <REP>          ..
06/07/2010  15:11             8 777 lire.txt
06/07/2010  15:20    <REP>          Save
06/07/2010  15:10           154 783 upgrade.exe
06/07/2010  15:11               453 upgrade.ini
06/07/2010  15:10             2 045 upgrade.log
               4 fichier(s)          166 058 octets
 
 Répertoire de U:\Share\Save
 
06/07/2010  15:20    <REP>          .
06/07/2010  15:20    <REP>          ..
06/07/2010  15:12               843 infos.dat
06/07/2010  15:12               227 lire.txt
06/07/2010  15:14             1 071 session.dat
               3 fichier(s)            2 141 octets
 
     Total des fichiers listés :
               7 fichier(s)          168 199 octets
               5 Rép(s)  46 635 401 216 octets libres
=======================
Suppressions
=======================
=======================
Arbo apres suppressions
=======================
 Le volume dans le lecteur U s'appelle Data
 Le numéro de série du volume est 7404-6451
 
 Répertoire de U:\Share
 
06/07/2010  15:20    <REP>          .
06/07/2010  15:20    <REP>          ..
06/07/2010  15:11             8 777 lire.txt
               1 fichier(s)            8 777 octets
 
     Total des fichiers listés :
               1 fichier(s)            8 777 octets
               2 Rép(s)  46 635 569 152 octets libres


 
Si tu as toujours des problèmes, essaye de donner un peu plus de précisions.
Tu peux remplacer ECHO OFF par ECHO ON pour avoir une trace de ce qui est fait.
 
Jean-Pierre.

Reply

Marsh Posté le 06-07-2010 à 17:07:54    

Je viens de tester.
Merci ça fonctionne mieux maintenant. Reste 2 répertoires qui ne sont pas supprimés :
1 répertoire nommé Bases Commerciales (vide)
1 autre répertoire nommé pivot Etoil avec 2 fichiers outputSIDEC_1.tar.gz et outputSIDEC_2.tar.gz qui ne sont pas supprimés.
+ 1 fichier à la racine du répertoire nommé -!!!- Contenu Répertoire 97-Temp Supprimé tous les W-E-!!!-.txt

 

-------

 
Code :
  1. C:\Documents and Settings\brunautma\Desktop>SET Rep=S:\97-Temp
  2. C:\Documents and Settings\brunautma\Desktop>SET Fic=----!!!----IMPORTANT A LIRE-
  3. ---!!!----.txt
  4. C:\Documents and Settings\brunautma\Desktop>ECHO =======================
  5. =======================
  6. C:\Documents and Settings\brunautma\Desktop>ECHO Arbo avant suppressions
  7. Arbo avant suppressions
  8. C:\Documents and Settings\brunautma\Desktop>ECHO =======================
  9. =======================
  10. C:\Documents and Settings\brunautma\Desktop>DIR /S S:\97-Temp
  11. Le volume dans le lecteur S s'appelle 3229
  12. Le numéro de série du volume est 0000-1305
  13. Répertoire de S:\97-Temp
  14. 06/07/2010  17:06    <REP>          .
  15. 28/06/2010  14:46    <REP>          ..
  16. 02/07/2010  14:00               903 ----!!!----IMPORTANT A LIRE----!!!----.txt
  17. 06/07/2010  17:05    <REP>          pivot Etoil
  18. 08/06/2010  09:42    <REP>          Bases Commerciales
  19. 30/06/2010  11:48                 0 -!!!- Contenu Répertoire 97-Temp Supprimé to
  20. us les W-E-!!!-.txt
  21.                2 fichier(s)              903 octets
  22. Répertoire de S:\97-Temp\pivot Etoil
  23. 06/07/2010  17:05    <REP>          .
  24. 06/07/2010  17:06    <REP>          ..
  25. 01/06/2010  12:37       127 902 600 outputSIDEC_1.tar.gz
  26. 04/06/2010  14:44        55 383 634 outputSIDEC_2.tar.gz
  27.                2 fichier(s)      183 286 234 octets
  28. Répertoire de S:\97-Temp\Bases Commerciales
  29. 08/06/2010  09:42    <REP>          .
  30. 06/07/2010  17:06    <REP>          ..
  31.                0 fichier(s)                0 octets
  32.      Total des fichiers listés :
  33.                4 fichier(s)      183 287 137 octets
  34.                8 Rép(s)  408 873 861 120 octets libres
  35. C:\Documents and Settings\brunautma\Desktop>ECHO =======================
  36. =======================


Message édité par mattwarend2002 le 06-07-2010 à 17:10:26
Reply

Marsh Posté le 06-07-2010 à 17:15:59    

Je pense qu'au moins une partie du problème vient des espaces et caractères spéciaux présents dans les noms de fichiers (il manque la trace de la partie suppressions)
A essayer, mettre les noms de répertoire et fichiers entre guillemets :

Code :
  1. # REM Suppression des répertoires
  2. FOR /D %%d IN (%Rep%\*) DO RMDIR /S /Q "%%d"
  3. REM Suppression fichiers
  4. FOR %%f IN (%Rep%\*) DO (
  5.     IF  NOT "%%~nxf" == "%Fic%" DEL /F "%%f"
  6. )


 
Jean-Pierre.

Reply

Marsh Posté le 07-07-2010 à 10:56:56    

aigles a écrit :

Je pense qu'au moins une partie du problème vient des espaces et caractères spéciaux présents dans les noms de fichiers (il manque la trace de la partie suppressions)
A essayer, mettre les noms de répertoire et fichiers entre guillemets :

Code :
  1. # REM Suppression des répertoires
  2. FOR /D %%d IN (%Rep%\*) DO RMDIR /S /Q "%%d"
  3. REM Suppression fichiers
  4. FOR %%f IN (%Rep%\*) DO (
  5.     IF  NOT "%%~nxf" == "%Fic%" DEL /F "%%f"
  6. )


 
Jean-Pierre.


 
Un grand merci !!
Ça fonctionne maintenant.
@+

Reply

Marsh Posté le 07-07-2010 à 10:56:56   

Reply

Marsh Posté le 28-07-2010 à 18:33:25    

Pour info robocopy permet d'exclure des répertoires/fichiers lors de la copie ou du déplacement.
 
Il aurait suffit alors de déplacer tout sauf ton fichier vers nul ;)


---------------
Quand on aime on ne compte pas. Quel Dilemme lorsque l'on aime compter !
Reply

Sujets relatifs:

Leave a Replay

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