Lister des fichiers et en supprimer certains ! - Shell/Batch - Programmation
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 ?
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.
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 ?
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.
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
Bonne journée.
Marsh Posté le 09-01-2006 à 10:33:17
Oui, tu oublies des choses.
for /?
pour plus d'infos, dont les exemples
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
@+
Marsh Posté le 10-01-2006 à 06:21:06
Ouais, tu as tout à fait raison
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 ?
Marsh Posté le 10-01-2006 à 20:19:49
Ca me parait plutot pas mal Mon cadre est semi-pro 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.
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 !