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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Lister des fichiers et en supprimer certains !

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lister des fichiers et en supprimer certains !

n°1279044
thebat
Posté le 08-01-2006 à 12:52:41  profilanswer
 

Salut !
Je me demandais s'il était possible de faire la chose suivante:
 
- J'ai 2 dossiers: dossier1 et dossier2 > leur contenu est identique: memes fichiers, memes sous-dossiers.
- Je créer un nouveau fichier dans le dossier2.
- Je lance un fichier .bat depuis le dossier1 qui me permet de supprimer tout les fichiers/dossiers qui sont présents dans le dossier2 et qui ne le sont pas dans le dossier1
 
Est-ce possible ? faire une boucle qui liste tous les fichiers en incluant les sous-dossiers dans laquelle on fait un IF EXIST ?
 
Merci par avance de votre aide ! Bonne aprem !

mood
Publicité
Posté le 08-01-2006 à 12:52:41  profilanswer
 

n°1279159
thebat
Posté le 08-01-2006 à 16:43:29  profilanswer
 

J'ai trouvé ca :
 
FOR %f IN (*.*) DO IF NOT EXIST "c:\dossier1\%f" DEL %f
 
Effectivement, si j'execute cette ligne alors que je suis dans le dossier2, cela supprime bien tous les fichiers qui sont dans dossier2 et dont la copie n'existe pas dans dossier1 !
 
Mais cela ne fonctionne pas pour les sous-dossiers.. sauriez-vous comment faire ?

n°1279196
wackevat
Posté le 08-01-2006 à 18:45:57  profilanswer
 

Regarde l'option
/r
et les substitutions
%~n, %~d, etc.
de la commande
for
 
Fais
for /?
pour plus d'infos.

n°1279350
thebat
Posté le 08-01-2006 à 23:48:47  profilanswer
 

Pas de problème avec le /r ! cela fonctionne parfaitement mais en revanche je n'ai pas compris l'utilité des autres caractères. Auraient-ils un lien avec mon nouveau problème ?
 
Voici ma ligne de commande:
SET rep1="c:\dossier1"
SET rep2="c:\dossier2"
 
cd %rep2%
FOR /r %%f IN (*.*) DO IF NOT EXIST "%rep1%\%%f" DEL %%f
 
Ce qui ne fonctionne pas (au niveau du IF NOT EXIST) puisqu'il cherche un fichier situé ici: ""c:\dossier1"\C:\dossier2\sous-dossier\fichier.txt"
 
Comment faire maintenant ? :p

n°1279393
wackevat
Posté le 09-01-2006 à 01:12:01  profilanswer
 

Puisque %%f imprime dans le cas récursif le chemin complet de chaque fichier, d'où l'utilité des substitutions.  
   
Juste fais un  
echo  
avec chacune, tu comprendras.  
   
Et remplace  
cd %rep2%  
par  
for /r %rep2%  
c'est plus "joli".  
   
Sinon, un conseil : ne mets jamais les guillemets quand tu définis les variables, mais uniquement quand tu les appelles. Cela pour éviter les guillemets un peu partout et qui cause des fois pas mal d'erreurs.

n°1279418
thebat
Posté le 09-01-2006 à 08:15:20  profilanswer
 

Merci bien de tous ces conseils !
Pour le moment le echo %~n et %~d ne fonctionnent pas ca me fait tout planter.. je dois oublier quelquechose, je dois filer donc je verrais ca plus tard. Ya un truc spécial a faire ? c chaud de chercher dans google avec de tels caracteres :p
 
Bonne journée.

n°1279459
wackevat
Posté le 09-01-2006 à 10:33:17  profilanswer
 

Oui, tu oublies des choses.
 
for /?
pour plus d'infos, dont les exemples ;)

n°1279844
thebat
Posté le 09-01-2006 à 20:05:44  profilanswer
 

FOR /R %rep2% %%f IN (*) DO IF NOT EXIST "%rep1%\%%~nf" DEL %%f
 
Donc c bon, en lisant j'ai compris :) Merci.
Seul hic ! ca pose probleme pour les sous dossiers car du coup l'arborescence est foutue ! Comment avoir l'arborescence à partir du sossier en cours ?
 
ps: désolé si la solution est encore sous mes yeux.. j'ai un peu de mal à les ouvrir en ce moment :D
 
@+

n°1280075
wackevat
Posté le 10-01-2006 à 06:21:06  profilanswer
 

Ouais, tu as tout à fait raison :D
 
Question : c'est pour un usage personnel ou professionnel ?
 
Car si personnel, on peut "bricoler" de cette façon :
 
- monter %rep2% comme un lecteur virtuel. Normalement la lettre B n'est pas prise, mais bien sûr on peut prendre n'importe quelle lettre disponible (une simple boucle for suffit pour la vérif). La commande nécessaire est
subst
 
- De là, un fichier
%rep2%\sous_rep\fichier
devient
B:\sous_rep\fichier
et
%%~pf
est justement le morceau qui nous intéresse
\sous_rep\fichier
 
- Ce qui donne l'équivalent sous %rep1% :
%rep1%\sous_rep\fichier = %rep1%%%~pf
 
- une fois terminé, on démonte le lecteur temporaire par la même commande
subst
 
Mais dans un cadre pro, ce n'est pas très "élégante" je trouve comme soluce... ;) et il arrive qu'aucune lettre n'est libre.
 
Qu'en penses-tu ?

n°1280889
thebat
Posté le 10-01-2006 à 20:19:49  profilanswer
 

Ca me parait plutot pas mal :) Mon cadre est semi-pro :D J'en ai besoin pour une présentation pour mes cours.
 
Je test ca dans la soirée, normalement ya pas de souci je pense, je te tiens quand même au courant :)
 
Merci beaucoup pour ton aide en tout cas !  
Bonne fin de soirée et bonne continuation.

mood
Publicité
Posté le 10-01-2006 à 20:19:49  profilanswer
 

n°1280944
thebat
Posté le 10-01-2006 à 21:24:34  profilanswer
 

Ca marche, c'est bon cette fois ! Merci.

n°1280972
wackevat
Posté le 10-01-2006 à 22:03:58  profilanswer
 

:jap:


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

  Lister des fichiers et en supprimer certains !

 

Sujets relatifs
[DOS] Transformer des noms de fichiers longs en court, impossible ?Partage de fichiers sécurisé (SSH ou SSL)
[Résolu][Batch] Renommer des fichiersChargement d'une animation flash -> supprimer le rectangle blanc
Supprimer l'affichage des erreurs javascript.Requete pour lister un champ de type ENUM
[ RESOLU ] Effacer des fichiers PDF qui ont plus d'une heurecopie de contenu de n fichiers dans un seul fichier
[PHP QST] envoie de plusieurs fichiers en un seul tour de main[réglé] [MsDos] Copier des fichiers Tempory Internet Files
Plus de sujets relatifs à : Lister des fichiers et en supprimer certains !


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