Tom's Guide > Forum > Programmation > msdos (passer un fichier un par un du répertoire)

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

Forum Programmation : msdos (passer un fichier un par un du répertoire)

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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:

Code :
  1. DIR /B copiessai > listeFichiers.txt



Ensuite tu boucles sur les lignes du fichier:

Code :
  1. FOR /F %%i in listeFichiers.txt DO tonScript "%%i"



si tu veux tout mettre dans le for:

Code :
  1. FOR /F %%i in listeFichiers.txt DO (
  2. 'ton script ici en utilisant "%%i" au lieu du fichier
  3. )


avec un @echo off pour ne pas voir tout le texte ;-)

Répondre à CRicky

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

Répondre à thegege2002

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:

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



mais je pense que c'est plus lisible de faire un autre .bat

Répondre à CRicky

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

Répondre à thegege2002

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.

Répondre à CRicky
Tom's Guide > Forum > Programmation > msdos (passer un fichier un par un du répertoire)
Aller à :

Il y a 304 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens