Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1611 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Supprimer contenu répertoire sauf 1 fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer contenu répertoire sauf 1 fichier

n°2006525
mattwarend​2002
Posté le 02-07-2010 à 10:03:12  profilanswer
 

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.

mood
Publicité
Posté le 02-07-2010 à 10:03:12  profilanswer
 

n°2006532
art_dupond
je suis neuneu... oui oui !!
Posté le 02-07-2010 à 10:14:52  profilanswer
 

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


---------------
oui oui
n°2006538
mattwarend​2002
Posté le 02-07-2010 à 10:39:46  profilanswer
 

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

n°2006763
Sve@r
Posté le 02-07-2010 à 21:27:27  profilanswer
 

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.
n°2006783
aigles
Posté le 02-07-2010 à 23:12:53  profilanswer
 

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.

n°2007390
mattwarend​2002
Posté le 06-07-2010 à 14:05:49  profilanswer
 

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.

n°2007436
aigles
Posté le 06-07-2010 à 15:26:15  profilanswer
 

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.

n°2007484
mattwarend​2002
Posté le 06-07-2010 à 17:07:54  profilanswer
 

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
n°2007487
aigles
Posté le 06-07-2010 à 17:15:59  profilanswer
 

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.

n°2007677
mattwarend​2002
Posté le 07-07-2010 à 10:56:56  profilanswer
 

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.
@+

mood
Publicité
Posté le 07-07-2010 à 10:56:56  profilanswer
 

n°2012637
Xspawn_Lpc
Posté le 28-07-2010 à 18:33:25  profilanswer
 

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 !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Supprimer contenu répertoire sauf 1 fichier

 

Sujets relatifs
Trier un fichierLister les fichiers d'un répertoire : problème de portabilité?
Problème pour modifier la valeur d'une ligne dans un fichierComment supprimer un "warning" lié au mot-clef "const"
Suppression du fichier desktop.htt par VBSlancer une classe depuis un fichier bat
Copie automatique fichier excel à heure fixe(résolu... trop con) CHAINES supprimer xxx entre 'A' et 'B' ???
numerotation croissante de commande pour fichier xmlRécupérer les notes (tonalité+vélocité+durée) d'un fichier Midi
Plus de sujets relatifs à : Supprimer contenu répertoire sauf 1 fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR