Votre question

msdos (passer un fichier un par un du répertoire)

Tags :
  • Programmation
Dernière réponse : dans Programmation
27 Janvier 2006 16:30:58

Bonjour tout le monde,

J'expose mon problème.
IL y a 2 dossiers sur mon disque dur.
1 qui s'appelle copiessai.
l'autre qui s'appelle essai.
Je voudrais un fichier batch permettant de supprimer un
fichier ou des fichiers qui n'existe pas dans l'autre dossier.

Par exemple dans le dossier copiessai il y un fichier
qui s'appelle sonar_setup.exe, et dans l'autre dossier ce fichier
n'existe pas.Je voudrais que ce fichier soit supprimé de
copiessai.

Voilà ce que j'ai réussi à faire :

if exist c:\copiessai\sonar_setup.exe goto suite
goto fin
:suite
if not exist c:\essai\sonar_setup.exe goto suite2
echo rien à supprimer
goto fin
:suite2
del c:\copiessai\sonar_setup.exe
:fin

Donc c'est absolument ceux que je veux faire sauf que l'on doit
indiquer le fichier (autant supprimer à la main).
Mais je voudrais que ça soit plusieurs fichiers du dossier
à supprimer.
Je pensais faire une boucle pour passer tout le dossier et
mettre une variable au lieu de sonar_setup.exe mais je
n'y arrive pas.

Si vous n'avez rien compris je veux bien vous réexpliquer.

En espérant que vous m'apporterez votre aide

Thegege2002

Autres pages sur : msdos passer fichier repertoire

a b L Programmation
27 Janvier 2006 18:24:48

Bon j'ai lu rapidement, mais je pense avoir compris:
Tu fais un DIR /B sur le répertoire et tu redirige l'affichage écran dans un fichier:
  1. DIR /B copiessai > listeFichiers.txt


Ensuite tu boucles sur les lignes du fichier:
  1. FOR /F %%i in listeFichiers.txt DO tonScript "%%i"


si tu veux tout mettre dans le for:
  1. FOR /F %%i in listeFichiers.txt DO (
  2.  
  3. 'ton script ici en utilisant "%%i" au lieu du fichier
  4.  
  5. )

avec un @echo off pour ne pas voir tout le texte ;-)
30 Janvier 2006 12:44:37

Donc voilà ce que j'ai réussi à faire :

J'ai lister les fichiers dans une commande dir et envoyer vers un fichier.txt qui s'appelle listefichiers.txt
Ensuite j'ai utilisé la commande for

for /f %%i in (listefichiers.txt) do (
if exist c:\copiessai\%%i goto suite
goto fin
:suite
if not exist c:\essai\%%igoto suite2
echo rien à supprimer
goto fin
:suite2
del c:\copiessai\%%i
:fin)

Le résultat c'est qu'il m'affiche des choses mais n'éxécute rien
Il affiche :
for /f %%i in (listefichiers.txt) do (
if exist c:\copiessai\Athlete.jpg goto suite
goto fin
if not exist c:\essai\Athlete.jpg goto suite2
echo rien à supprimer
goto fin
del c:\copiessai\Athlete.jpg

C'est incohérent puisque si il existe il devrait aller directement dans suite...
enfin bon j'espère que vous m'éclaircirez
Contenus similaires
a b L Programmation
30 Janvier 2006 19:09:57

Appareement, On ne peux pas mettre de label pour les GOTO dans un FOR (p2pman l'a remarqué).
je te suggère de faire dans le FOR:

  1. if exist c:\copiessai\%%i (
  2.  
  3. if not exist c:\essai\%%i (
  4.  
  5. del c:\copiessai\%%i
  6.  
  7. ) else echo rien à supprimer
  8.  
  9. ) else (
  10. echo rien à supprimer
  11. )


mais je pense que c'est plus lisible de faire un autre .bat
31 Janvier 2006 09:13:03

Merci de ton aide cricky en fait on m'a répondu sur un autre forum et je vais donner la solution pour faire partager (Ledudulélà est mon sauveur) :

Donc il fallait seulement changer mes %%i en %1 vous allez voir :

C'est essai.bat
for /f %%i in (listefichiers.txt) do script2.bat %%i

C'est le script2.bat :
if exist c:\copiessai\%1 goto suite
goto fin
:suite
if not exist c:\essai\%1 goto suite2
echo rien à supprimer
goto fin
:suite2
del c:\copiessai\%1
:fin

Voilà ce qu'il fallait faire :-)
a b L Programmation
31 Janvier 2006 13:25:27

oui, %1 est le premier paramètre du batch, %2 le 2ème etc.
Là tu appelles le script script2.bat avec 1 paramètre.

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS