[Résolu] boucle for ne retient que la dernière ligne du fichier

boucle for ne retient que la dernière ligne du fichier [Résolu] - Shell/Batch - Programmation

Marsh Posté le 17-01-2010 à 18:53:42    

bonjour, c'est un peu le bronx sur mon ordi, j'ai des photos un peu partout et je veux faire un batch pour les classer par mois de prise de vue.
j'ai fait un fichier et une boucle for pour récupérer le mois de la création de fichier.
 
or quand je lance la boucle, j'ai l'impression qu'il ne me retient que la dernière ligne de mon fichier. et je ne vois pas ou ça coince.
 
merci d'avance :
 
@echo off
cls
for /r d:\ %%i in (*.jpg) do echo %%~ftzai >> d:\jpeg.txt
 
FOR /F "tokens=2-4 delims=/ " %%i in (d:\jpeg.txt) do set datetmp=%%j_%%k
if not exist d:\photos\%datetmp%  md d:\photos\%datetmp%
 
il ne me crée que un seul sous répertoire qui correspond à la date de la dernière ligne du fichier généré (jpeg.txt)


Message édité par MonGhost le 21-01-2010 à 22:45:41
Reply

Marsh Posté le 17-01-2010 à 18:53:42   

Reply

Marsh Posté le 18-01-2010 à 09:36:41    

normal car le for ne prend qu'une seul instruction par défaut comme dans la plupart des langages, pour en mettre plus il faut utiliser des blocs, ici avec des parenthèses:

Code :
  1. FOR /F "tokens=2-4 delims=/ " %%i in (d:\jpeg.txt) do (
  2.     set datetmp=%%j_%%k
  3.     if not exist d:\photos\%datetmp%  md d:\photos\%datetmp%
  4. )

Reply

Marsh Posté le 18-01-2010 à 11:23:39    

Merci beaucoup pataluc, je teste ça ce soir.

Reply

Marsh Posté le 18-01-2010 à 22:41:58    

je viens d'essayer je n'ai même plus la création du dossier que j'avais avec le code initial, peut-être ai oublié quelque chose il ne me semble pas pourtant...
je test avec powerbatch, je ne pense pas que ça ait un impact

Reply

Marsh Posté le 21-01-2010 à 21:48:12    

Personne ?
snif...

Reply

Marsh Posté le 21-01-2010 à 22:03:49    

Yes j'ai trouvé  
en fait en déclarant datetmp j'écrasais systématiquement ma la valeur de ma variable avant de passer à la ligne suivante
 
il fallait simplement faire le mkdir sur les %%j et %%k comme ci dessous :
 

Citation :

FOR /F "tokens=2-4 delims=/ " %%i in (d:\jpeg.txt) do (
if not exist d:\photos\%%j_%%k   md d:\photos\%%j_%%k)

Reply

Sujets relatifs:

Leave a Replay

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