Lister des fichiers et en supprimer certains !

Lister des fichiers et en supprimer certains ! - Shell/Batch - Programmation

Marsh Posté le 08-01-2006 à 12:52:41    

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 !

Reply

Marsh Posté le 08-01-2006 à 12:52:41   

Reply

Marsh Posté le 08-01-2006 à 16:43:29    

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 ?

Reply

Marsh Posté le 08-01-2006 à 18:45:57    

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

Reply

Marsh Posté le 08-01-2006 à 23:48:47    

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

Reply

Marsh Posté le 09-01-2006 à 01:12:01    

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.

Reply

Marsh Posté le 09-01-2006 à 08:15:20    

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.

Reply

Marsh Posté le 09-01-2006 à 10:33:17    

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

Reply

Marsh Posté le 09-01-2006 à 20:05:44    

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

Reply

Marsh Posté le 10-01-2006 à 06:21:06    

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 ?

Reply

Marsh Posté le 10-01-2006 à 20:19:49    

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.

Reply

Marsh Posté le 10-01-2006 à 20:19:49   

Reply

Marsh Posté le 10-01-2006 à 21:24:34    

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

Reply

Marsh Posté le 10-01-2006 à 22:03:58    

:jap:

Reply

Sujets relatifs:

Leave a Replay

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