recupérer une chaine de texte d'un variable FOR

recupérer une chaine de texte d'un variable FOR - Shell/Batch - Programmation

Marsh Posté le 30-09-2016 à 14:39:51    

Bonjour à tous
 
Selon vous pourquoi ce script ne marche pas ?
 
for %%B in (*.rar) do (  
set "toto= %%B"
echo %toto%
echo toto
echo "toto"
echo "%toto%"
echo %"toto"%
)
 
le but est de récupérer le nom du fichier .rar d abord dans la variable B
puis de la passer à toto pour que ce dernier en garde une copie et éventuellement m'en servir après dans une autre commande
 
En faisant la serie d'echo, j essaye de déterminer la forme à utiliser pour utiliser correctement toto mais aucune sortie ne m affiche le nom du fichier. Certainement une erreur de syntaxe mais je sèche

Reply

Marsh Posté le 30-09-2016 à 14:39:51   

Reply

Marsh Posté le 30-09-2016 à 14:53:59    

ce que je voudrais faire est conforme à ce qui suit mais je voudrais ma passer d un call
 
fichier za.bat
set currentpath=%~dp0
for %%x in (*.rar) do (  
call za02.bat "%%x"
)
pause
 
fichier za02.bat
set toto= %1
echo %toto%

Reply

Marsh Posté le 30-09-2016 à 21:35:30    

J'ai eu le même problème cette semaine :  
Et j'ai trouvé ma réponse ici :
http://stackoverflow.com/questions [...] -a-command

Code :
  1. for /f "delims=" %%a in ('ver') do @set foobar=%%a


 
'ver' est la commande exécutée

Reply

Marsh Posté le 03-10-2016 à 14:45:41    

merci mais dans mon cas ca ne marche pas

Reply

Marsh Posté le 03-10-2016 à 14:49:50    

Ben donne nous ton code, car c'est bien beau de dire "ça ne marche pas" si tu ne nous montres rien du tout...

Reply

Marsh Posté le 03-10-2016 à 16:40:39    

gatsu35 a écrit :

Ben donne nous ton code, car c'est bien beau de dire "ça ne marche pas" si tu ne nous montres rien du tout...


Sauf erreur de ma part il est en tête du Topic alors pour ce genre de réflexion tu peux passer ton chemin

Reply

Marsh Posté le 03-10-2016 à 16:42:34    

xri59 a écrit :


Sauf erreur de ma part il est en tête du Topic alors pour ce genre de réflexion tu peux passer ton chemin


- Je t'ai donné du code
- Tu me réponds : "merci mais dans mon cas ca ne marche pas"
- Et là tu me dis que ton code est dans le premier code, mais moi je veux le dernier code qui t'a permis de dire "Ca ne marche pas"...
- Toi aussi tu peux passer ton chemin si tu ne veux pas d'aide...


Message édité par gatsu35 le 03-10-2016 à 16:42:54
Reply

Marsh Posté le 03-10-2016 à 17:47:52    

le fichier initial qui ne marche pas
for %%B in (*.rar) do (  
set "toto= %%B"
echo %toto%
echo toto
echo "toto"
echo "%toto%"
echo %"toto"%
)  
 
après différents essais en jouant avec le@
for %%B in (*.rar) do (  
@set "toto= %%B"
echo %toto%
echo toto
echo "toto"
echo "%toto%"
echo %"toto"%
@set "toto=%%B"
echo %toto%
echo toto
echo "toto"
echo "%toto%"
echo %"toto"%
@set "toto=%%B"
echo %toto%
echo toto
echo "toto"
echo "%toto%"
echo %"toto"%
)

Reply

Marsh Posté le 03-10-2016 à 18:03:10    

Mais sinon, as tu essayé ma ligne de code ?  

Code :
  1. for /f "delims=" %%a in ('ver') do @set toto=%%a
  2. echo %toto%


==> Microsoft Windows [version 6.1.7601]
 
Je vois pas trop ton pb, parce que là tu fais n'importe quoi.
 
Tu oublies complètement ton code, et tu réponds simplement à ma question :  
Tu veux faire quoi exactement ?
Tu as quoi en entrée, tu veux quoi en sortie ?

Reply

Marsh Posté le 04-10-2016 à 08:29:48    

Ce qui fonctionne :
fichier za.bat
set currentpath=%~dp0
for %%x in (*.rar) do (  
call za02.bat "%%x"
)
pause
 
fichier za02.bat
set toto= %1
echo %toto%  
 
Je veux me passer de la partie call et intégrer le code de za02 dans za
 
le but pour moi est de récuperer le %%x du for (qui correspond à chaque fichier rar de mon répertoire) dans une variable
puis de traiter cette variable (texte) en analysant son contenu. Cela peut par exemple être pour remplacer les é en e ou bien d autre chose encore voila.
 
Je pense que cela reste faisable en batch ms/dos mais le pb pour moi est d'affecter à la variable toto le %%x ... A chaque tentative la commande echo n'afffiche rien.
C'est un simple pb d'affectation de variable.
Merci

Reply

Marsh Posté le 04-10-2016 à 08:29:48   

Reply

Marsh Posté le 04-10-2016 à 13:30:03    

set toto = "%%x"
 
?

Reply

Marsh Posté le 04-10-2016 à 14:21:38    

et non
echo %toto% dans ce cas donne rien a part commande echo activée

Reply

Marsh Posté le 04-10-2016 à 15:46:15    

Code :
  1. for %%x in (*.jpg) do (
  2. set toto=%%x
  3. echo %toto%
  4. )
  5. echo %toto%
  6. pause


 
Voilà un élément de réponse.
En même temps rien ne sert d'utiliser %toto% dans la boucle car il est accessible par %%x.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 04-10-2016 à 16:39:52    

pour le toto dans la boucle j'ai besoin de le sauvegarder dans une variable
 
effectivement le echo en ligne 5 fonctionne, seulement il ne contient que la valeur du dernier fichier lu dans la boucle For
 
ce que je veux c est de pouvoir accéder à chaque itération d'ou le echo dans le For en ligne 3 et malheureusement celui ci ne contient rien du tout et donc n'affiche rien

Reply

Marsh Posté le 04-10-2016 à 16:40:58    

Et la réponse est que le parsage n'est réalisé qu'en sortie de boucle, afin de s'en affranchir il faut faire ainsi :

 
Code :
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%x in (*.jpg) do (
  4. set toto=%%x
  5. echo !toto!
  6. )
  7. endlocal
  8. pause
 

Après, comme je l'ai dit précédemment, l'intérêt est maigre puisque tu peux toujours utiliser %%x dans ta boucle.

 


EDIT : mais cela ne change pas le fait qu'une fois sorti de ta boucle, %toto% ne contiendra que la dernière valeur mais c'est normal...


Message édité par MaybeEijOrNot le 04-10-2016 à 16:43:30

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 04-10-2016 à 17:22:01    

donc supprimer le parsage permet de récupérer la valeur ...
ok merci je vais essayer  
 
finalement le parsage sert à quoi  ?

Reply

Marsh Posté le 04-10-2016 à 19:55:20    

Il permet au langage d'exister...
 
Tu ne le supprimes pas, tu lui dis juste de ne pas allouer la mémoire de la même manière. Sans l'option ajoutée, tu ne pouvais pas modifier la variable tant que la boucle n'était pas terminée.
 
http://initscreen.developpez.com/t [...] tch/#LIV-C
http://initscreen.developpez.com/t [...] batch/#LVI


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 05-10-2016 à 09:09:59    

super
merci pour ces précisions

Reply

Sujets relatifs:

Leave a Replay

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