Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1154 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1802861
aspegic500​mg
Posté le 21-10-2008 à 16:58:42  profilanswer
 

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:

mood
Publicité
Posté le 21-10-2008 à 16:58:42  profilanswer
 

n°1803043
aspegic500​mg
Posté le 22-10-2008 à 09:18:37  profilanswer
 

:bounce:

n°1803423
aspegic500​mg
Posté le 23-10-2008 à 10:14:43  profilanswer
 

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

n°1804340
i'm_here
Tunisie
Posté le 24-10-2008 à 19:29:27  profilanswer
 

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
n°1804345
Nono le pe​tit robot
Posté le 24-10-2008 à 19:39:51  profilanswer
 

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 !

n°1804815
aspegic500​mg
Posté le 26-10-2008 à 22:54:28  profilanswer
 

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

n°1804816
aspegic500​mg
Posté le 26-10-2008 à 22:55:12  profilanswer
 

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
n°1804881
aspegic500​mg
Posté le 27-10-2008 à 10:05:17  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
Question bête. Mais je n'ai pas trouvé[résolu]boucle de classement selon valeur tableau
[TUTO] - [Batch Dos] Script changement de mot de passe ADBoucle sur répertoire en batch
echo $row['resolu']; trouver la date d'hier ???Batch répertoire .eps .jpg
[Résolu] - [Batch Dos] probleme commande for /F[java]ObjectIn/outputStream dans une boucle
[Batch] Utliser un batch sur 98, mais conçu avec XP 
Plus de sujets relatifs à : [batch] un bète SET puis ECHO dans une boucle for, mais non...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR