Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte
Expert Programmation

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 ;-)

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
Expert Programmation

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

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 :-)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde