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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [batch DOS] boucles FOR imbriquées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[batch DOS] boucles FOR imbriquées

n°1394891
En_Sabah_N​ur
お前はもう死んでいる
Posté le 26-06-2006 à 12:22:41  profilanswer
 

Après moults tests infructueux à essayer d'imbriquer plusieurs FOR dans un batch sous DOS, en faisant bien gaffe aux paramètres, je suis en train de me demander si c'était possible en fait?
 
Autre question pour ma culturation personnelle: y'a-t-il une limite de caractère à une ligne de batch?
 
:jap:


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
mood
Publicité
Posté le 26-06-2006 à 12:22:41  profilanswer
 

n°1394901
subtil
Posté le 26-06-2006 à 12:43:32  profilanswer
 

il paraitrait que les batch dos c'est la préhistoire et que depuis il y a le VB Script (fichier .vbs et double click)
 
en tout cas j'ai lu ça au moins 50 fois sur ce forum! :)

n°1394902
wackevat
Posté le 26-06-2006 à 12:43:42  profilanswer
 

Oui, c'est possible de les imbriquer.
 
Maintenant, tes erreurs pourraient être dues à autres choses.
 
Poste ton script + résumé du problème.

n°1395068
En_Sabah_N​ur
お前はもう死んでいる
Posté le 26-06-2006 à 15:54:49  profilanswer
 

wackevat a écrit :

Oui, c'est possible de les imbriquer.
 
Maintenant, tes erreurs pourraient être dues à autres choses.
 
Poste ton script + résumé du problème.


Dans l'urgence, j'ai dû faire autrement et ai donc effacé tous les essais/tests, mais c'était de ce genre là:
 

Code :
  1. FOR /F "tokens=1,2,3,4,5,6,7,8 delims=;" %%A IN (%~1) DO (FOR /F "tokens=1,2,3 delims=;" %%M IN (%~2) DO (ECHO %%A %%N >> toto.txt))


Problème: j'ai jamais rien eu dans toto.txt, et pourtant il y a ce qu'il faut dans les 2 fichiers en entrée...
 
Me fourvoie-je dans la compréhension du FOR?
 
subtil >> c'est déjà suffisamment le bordel dans l'application en question(appel php/batch/VB) pour que j'évite un autre type d'appel :d


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1395140
wackevat
Posté le 26-06-2006 à 16:53:12  profilanswer
 

Déjà tu peux écrire ta boucle de cette façon :

Code :
  1. for /f "tokens=1 delims=;" %%a in (%~1) do (
  2.   for /f "tokens=2 delims=;" %%n in (%~2) do (
  3.     echo a=---%%a---
  4.     echo n=---%%n---
  5.   )
  6. )
  7. pause


pour voir ce que ça affiche.
 
Est-ce qu'il y a des espaces dans %~1 et %~2 ?

n°1395185
En_Sabah_N​ur
お前はもう死んでいる
Posté le 26-06-2006 à 17:36:28  profilanswer
 

Ben mairdalors, ça marche [:le kneu]
 
Je comprend pas, j'ai dû tester comme une ouiche :d
Merci en tout cas :jap:


Message édité par En_Sabah_Nur le 26-06-2006 à 17:38:03

---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1396829
En_Sabah_N​ur
お前はもう死んでいる
Posté le 28-06-2006 à 19:40:06  profilanswer
 

Question: on ne peut pas déclarer une variable dans une boucle for?
 
Genre

Code :
  1. FOR /F "skip=3 tokens=1,2,3,4,5,6 delims=;" %%A IN (test.txt) DO (
  2. SET toto=123
  3. )
  4. ECHO %toto%


l'echo ne renvoit rien...C'est normal? :heink:


Message édité par En_Sabah_Nur le 03-07-2006 à 13:33:25

---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1396839
wackevat
Posté le 28-06-2006 à 19:50:31  profilanswer
 

Tu as encore testé "comme une ouiche" même si je ne sais pas ce que c'est :D
 
Sinon, toujours aussi moche ta façon de récupérer les tokens :o

n°1397020
En_Sabah_N​ur
お前はもう死んでいる
Posté le 29-06-2006 à 10:14:21  profilanswer
 

wackevat a écrit :

Tu as encore testé "comme une ouiche" même si je ne sais pas ce que c'est :D
 
Sinon, toujours aussi moche ta façon de récupérer les tokens :o


Une ouiche lorraine >> Le grand détournement :jap:
 
Moche? Pourquoi?
 
Et donc, tu affirmes à 100% que SET dans un FOR (même imbriqué?) marche correctement? (à savoir la variable en question est disponible hors de la boucle FOR)
L'exemple que je t'ai donné marche chez toi?


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1397259
En_Sabah_N​ur
お前はもう死んでいる
Posté le 29-06-2006 à 15:34:28  profilanswer
 

Trouvé!
 
Donc effectivement, ça marche pas, il faut spécifier l'utilisation des Delayed Expansion (?) avec ça:
SETLOCAL ENABLEDELAYEDEXPANSION
 
Alleluia! [:______ from ppc]


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
mood
Publicité
Posté le 29-06-2006 à 15:34:28  profilanswer
 

n°1397536
wackevat
Posté le 29-06-2006 à 22:55:34  profilanswer
 

Oui, ça s'appelle l'expansion retardée des variables d'environement ;)
 
A noter que cette option n'est pas toujours très "confortable" d'usage. Perso je préfère l'appel des procédures, cf. ce topic où j'ai donné un exemple :
http://forum.hardware.fr/hardwaref [...] 2792-1.htm
 
Sinon, ma remarque sur la mocheté :D concerne l'énumération des tokens :
tokens=1,2,3,4,5,6
 
Si tu as besoin de tous les 6 :
tokens=1-6
 
si seulement les 2, 3, 4 et 6è par exemple :
tokens=2-4,6
 
Cf. ma réponse du 26-06-2006 à 16:53.

n°1399395
En_Sabah_N​ur
お前はもう死んでいる
Posté le 03-07-2006 à 12:53:54  profilanswer
 

D'accord, je comprend...
Par contre, c'est plus explicite avec la méthode sale :D
 
Nouvelle question: l'ordre des paramètres tokens a-t-il une importance?
 

Code :
  1. FOR /F "skip=3 tokens=6,2,5,3,1,2 delims=;" %%A IN (test.txt) DO (echo toto)


me renverra-t-il les données dans les variables %%A, %%B, etc... suivant cet ordre?
A savoir cette correspondance:
6 --> %%A
2 --> %%B
5 --> %%C
etc...
 
J'ai bien peur que non, et ça m'embête fortement...


Message édité par En_Sabah_Nur le 03-07-2006 à 13:32:58

---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1399406
wackevat
Posté le 03-07-2006 à 12:59:35  profilanswer
 

Euh, il suffit de tester avec la commande
echo
hein ? :D

n°1399415
En_Sabah_N​ur
お前はもう死んでいる
Posté le 03-07-2006 à 13:05:15  profilanswer
 

Certes, mais visiblement, je suis pas très doué pour tester, y'a qu'à voir ce topic :D
 
Bref, perso, ça correspond pas et j'aurais voulu une confirmation...


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1399437
En_Sabah_N​ur
お前はもう死んでいる
Posté le 03-07-2006 à 13:31:37  profilanswer
 

Encore plus embêtant: il saute carrément les champs vides [:le kneu]
 
Si mon fichier contient "champ1;champ2;;champ4"
 

Code :
  1. FOR /F "tokens=1,2,3,4 delims=;" %%A IN (test.txt) DO (echo valeurs = %%A ** %%B ** %%C ** %%D)


il me retourne
valeurs = champ1 ** champ2 ** champ4 **
 
 [:iznogoud_23]

Message cité 1 fois
Message édité par En_Sabah_Nur le 03-07-2006 à 13:32:45

---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1399459
wackevat
Posté le 03-07-2006 à 13:53:16  profilanswer
 

En_Sabah_Nur a écrit :

Encore plus embêtant: il saute carrément les champs vides [:le kneu]


C'est par définition :D
 
Vois l'aide de  
for
pour plus de précisions.

n°1399973
En_Sabah_N​ur
お前はもう死んでいる
Posté le 04-07-2006 à 09:52:04  profilanswer
 

Une dernière question: il me faut insérer != dans une chaîne, seulement, ça marche pas même en entourant de guillemets et en échappant avec ^
 

Code :
  1. SET toto="^!="
  2. ECHO toto > toto.txt


renvoit "!="
 
Comment je peux faire?
 
edit: je précise que sans guillemets, j'obtiens seulement le signe = ...


Message édité par En_Sabah_Nur le 04-07-2006 à 10:03:01

---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1400102
wackevat
Posté le 04-07-2006 à 11:56:57  profilanswer
 

Code :
  1. set toto=^!^=
  2. echo %toto%>toto.txt


:D

n°1400287
En_Sabah_N​ur
お前はもう死んでいる
Posté le 04-07-2006 à 14:29:25  profilanswer
 

wackevat a écrit :

Code :
  1. set toto=^!^=
  2. echo %toto%>toto.txt


:D


Merci :jap:
 
Ça marche bien en test comme ça, mais c'est plus le cas une fois inclut dans mon batch :heink: (seul le = apparait)
J'utilise l'expansion retardée, du coup, le signe ! est peut-être bloqué?


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1400300
wackevat
Posté le 04-07-2006 à 14:39:23  profilanswer
 

Ouais.
 
Revois mon message du 29-06-2006 à 22:55 :D

n°1400308
En_Sabah_N​ur
お前はもう死んでいる
Posté le 04-07-2006 à 14:50:16  profilanswer
 

Ah ouais! Bon ben je m'y colle [:iznogoud_23]  
 
Encore merci :jap:


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1400887
En_Sabah_N​ur
お前はもう死んでいる
Posté le 05-07-2006 à 10:19:31  profilanswer
 

Nouvelle question:
 
je voudrais récupérer le résultat d'une commande directement dans une variable, comment je fais? ACtuellement, je passe dans un fichier temporaire, mais c'est beaucoup trop lent du coup...
 
Comme ça:

Code :
  1. cat %FIC_TMP% | gawk -F; "{print $2 }" > %FIC_TMP2%
  2.     SET /P COLUMN_A=<%FIC_TMP2%


L'objectif est de directement avoir le résultat du cat/gawk dans la variable COLUMN_A
 
C'est possible? (mes recherches sur le net ont été vaines)


Message édité par En_Sabah_Nur le 05-07-2006 à 10:32:21

---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
n°1401029
En_Sabah_N​ur
お前はもう死んでいる
Posté le 05-07-2006 à 12:56:04  profilanswer
 

J'ai trouvé un truc qui semble marcher:

Code :
  1. @ECHO OFF
  2. SET FIC_TMP=test.csv
  3. for /f %%a in ('call _commande.bat "%FIC_TMP%"') do (
  4.     set variable=%%a
  5.     echo %%a
  6. )
  7. echo Last line : %variable%


avec dans _commande.bat:

Code :
  1. cat %~1 | gawk -F; "{print $0 }"


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
mood
Publicité
Posté le   profilanswer
 


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

  [batch DOS] boucles FOR imbriquées

 

Sujets relatifs
[batch]inventaire réseau-problème de boucle "for"cherche batch pour changer un Wallpaper sous Win98
MPICH à partir de DOS......Appel d'un module dans une macro à partir d'un Batch
créer un fichier batch[Win Batch] Récupérer le nom FQDN du poste
[RÉSOLU] Problèmes divers FOR /Frecuperer l'adress mac de pc en reseau /batch
re re re batch envoi de mail via outlook ??batch envoi de mail via outlook ? 2 =)
Plus de sujets relatifs à : [batch DOS] boucles FOR imbriquées


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