[batch] un bète SET puis ECHO dans une boucle for, mais non...

un bète SET puis ECHO dans une boucle for, mais non... [batch] - Shell/Batch - Programmation

Marsh Posté le 21-10-2008 à 16:58:42    

Je cherche tout bêtement à mettre dans ma variable "fichier" le nom du fichier et son extension (sans le chemin), puis l'afficher.
La variable %%~nxF contient bien le nom du fichier, mais ensuite soit le SET soit le ECHO déconne, mais %fichier% est vide.
Ca fait 1h que je cherche, je suis sûr que c'est un truc tout bète, je viens donc poser ma question ici :o

Code :
  1. SET fichier=
  2. for %%F in (c:\*) do (
  3. SET fichier=%%~nxF
  4. ECHO fichier: %fichier%
  5. )


 
Merci :jap:

Reply

Marsh Posté le 21-10-2008 à 16:58:42   

Reply

Marsh Posté le 22-10-2008 à 09:18:37    

:bounce:

Reply

Marsh Posté le 23-10-2008 à 10:14:43    

y'en a quand même bien un qui a déjà fait ça ? :o :D

Reply

Marsh Posté le 24-10-2008 à 19:29:27    

Bonsoir,
 
!! à la place de %%
 

Setlocal enabledelayedexpansion
 
   1. SET fichier=
   2. for %%F in (c:\*) do (
   3. SET fichier=%%~nxF
   4. ECHO fichier: !fichier!
   5. )
endlocal


 
ou bien :
 

@echo off
 
SET fichier=
for %%F in (c:\*) do Set fichier=%%~nxF & call :nxt
GoTo End
 
:nxt
ECHO fichier: %fichier%
:End


Message cité 1 fois
Message édité par i'm_here le 24-10-2008 à 22:41:01
Reply

Marsh Posté le 24-10-2008 à 19:39:51    

aspegic500mg a écrit :

y'en a quand même bien un qui a déjà fait ça ? :o :D


 
Ben, pour moi, il y a une solution rapide :
Retire les deux-points ( : ) de la ligne ECHO et tu devrais voir le contenu de la variable !

Reply

Marsh Posté le 26-10-2008 à 22:54:28    

Nono le petit robot a écrit :


 
Ben, pour moi, il y a une solution rapide :
Retire les deux-points ( : ) de la ligne ECHO et tu devrais voir le contenu de la variable !


 
non :o

Reply

Marsh Posté le 26-10-2008 à 22:55:12    

i'm_here a écrit :

Bonsoir,
 
!! à la place de %%
 

Setlocal enabledelayedexpansion
 
   1. SET fichier=
   2. for %%F in (c:\*) do (
   3. SET fichier=%%~nxF
   4. ECHO fichier: !fichier!
   5. )
endlocal


 
ou bien :
 

@echo off
 
SET fichier=
for %%F in (c:\*) do Set fichier=%%~nxF & call :nxt
GoTo End
 
:nxt
ECHO fichier: %fichier%
:End




 
La première solution fonctionne, merci :jap:  
 
J'avais déjà essayé de mettre ça en œuvre, mais j'ai dû mal m'y prendre :)


Message édité par aspegic500mg le 26-10-2008 à 22:57:08
Reply

Marsh Posté le 27-10-2008 à 10:05:17    

Je me pose une question sur la commande Call: Quand la "procédure" appelée se trouve en fin de fichier, pas de problème, mais quand j'ai du code après, il se retrouve exécuté comme si il se trouvait dans la procédure:
 

Code :
  1. Setlocal enabledelayedexpansion
  2. SET fichier=
  3. for %%F in (c:\*) do (
  4. SET fichier=%%~nxF
  5. call :nxt
  6. )
  7. goto End
  8. :nxt
  9. ECHO fichier: !fichier!
  10. :End
  11. ECHO test


=> dans le cas présent, à chaque tour de boucle la commande "ECHO test" est exécutée, alors que je la voudrai seulement après la boucle.
Plutôt logique puisque la ligne ":End" n'indique pas la fin de la procédure.
 
 
 
J'ai consulté l'aide de la commande Call, et je trouve l'explication un peu obscure :na:  

Code :
  1. La commande CALL accepte maintenant des étiquettes comme cible de CALL. La
  2. syntaxe est :
  3. CALL :étiquette arguments
  4. Un nouveau contexte de fichier de commandes est créé avec les arguments
  5. spécifiés et le contrôle est transmis à la commande suivant l'étiquette
  6. spécifiée. Vous devez "quitter" deux fois en atteignant la fin du script du
  7. fichier de commandes deux fois. La première fois que vous lisez la fin, le
  8. contrôle reviendra juste après la commande CALL. La seconde fois vous
  9. quitterez le script de commandes. Entrez GOTO /? pour une description de
  10. l'extension GOTO :EOF qui vous permettra de "retourner" en dehors d'un script
  11. de commandes.


 
 
 
 
EDIT:
 
La réponse était tout bète :o
 
Si ca peut servir à d'autres...

Code :
  1. Setlocal enabledelayedexpansion
  2. SET fichier=
  3. for %%F in (c:\*) do (
  4. SET fichier=%%~nxF
  5. call :nxt
  6. )
  7. goto End
  8. :nxt
  9. ECHO fichier: !fichier!
  10. GOTO :EOF
  11. :End
  12. ECHO test


Message édité par aspegic500mg le 27-10-2008 à 10:10:54
Reply

Sujets relatifs:

Leave a Replay

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