Aide boucle FOR

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Vod2k
Batcheur occasionnel
Messages : 2
Enregistré le : 31 mars 2015 13:32

Aide boucle FOR

Message par Vod2k »

Bonjour,

Je cherche quelqu'un qui s'y connait en batch (je pense être au bon endroit, non ?).

J'ai un problème assez difficile à expliquer et pourtant je suis sur que la solution est simple, cependant même malgré mon expédition sur Google je n'ai rien trouvé d'assez explicite pour que je puisse comprendre.

J'aimerais utiliser une variable que va me donner une ligne de commande, je m'explique avec exemple :
Quand vous tapez wmic csproduct get name dans cmd vous obtenez par exemple Latitude E4310 (le modèle du PC)
J'aimerais donc que mon fichier .bat "voit" ce nom (Latitude E4310 pour l'exemple) pour qu'il puisse faire un
goto :E4310
:E4310
@echo Votre pc est un DELL E4310
@echo Installation des pilotes pour E4310 en cours ...

Je sais que la boucle for est capable de faire un truc semblable.
Du genre SI le modèle du PC est E4310 ALORS Installer les pilotes correspondants
Vod2k
Batcheur occasionnel
Messages : 2
Enregistré le : 31 mars 2015 13:32

Re: Aide boucle FOR

Message par Vod2k »

J'ai trouvé une solution mais je n'arrive pas à l'exploiter à fond.
Dans un batch je mets la commande wmic csproduct get name > c:\users\moi\documents\essaie.txt
Cela permettre de mettre dans un fichier texte ce que la commande renvoie.
On aura donc dans essaie.txt le texte suivant :

Name
Latitude E4310


(toujours pour le même exemple cité plus haut.)
Avec la commande findstr (qui recherche dans un fichier texte une chaine de caractère).
Est-il possible de faire une condition qui, SI dans essaie.txt il y a la chaine de caractère "E4310" ALORS goto :E4310
Paampaa
Batcheur occasionnel
Messages : 2
Enregistré le : 07 avr. 2015 19:04

Re: Aide boucle FOR

Message par Paampaa »

Bonjour,

Honte à moi j'ai posé un post pour une difficulté qui semble très proche de la tienne. Du coup on va peut être pouvoir s'entraider !!

Si je comprend bien tu désire extraire l'information "modèle", la placer dans une variable pour poivoir la comparer et créer du code spécifique a chaque modèle d'ordinateur.

J'ai fais pas mal de recherche et le point bloquant est à mon avis (mais je suis très loin d'être un spécialiste) que les modifications de variables ne sont pas mémoriser en dehors de la boucle for. Apparemment on peut remédier a ce problème en entrant la commande:

SETLOCAL ENABLEDELAYEDEXPANSION

Dans mon cas ca ne semble pas corriger le probleme mais je ne sais pas si j'ai les droits pour utiliser cette commande étant donné que je ne suis pas administrateur.
Pour ton code je te propose ceci:

For "skip=1 tokens=* delims=" ('wmic csproduct get name') do (set mod=%%a)

Si j'ai bien compris le boucle for:

-skip=1 fait que la première ligne n'est pas pris en compte
-token=* je ne comprend ce sud-est le token dans une boucle for...
- delims= fait qu'il n'y a pas de coupure dans la ligne mémorisé (on pourrait faire en sorte de n'enregistrer que le numero de modele du cas que tu as explicité mais si tu as des machines qui ne respecte pas le même format ca marchera pas pour d'autres machines).

Si tu remplace la commande set par une commande echo dans la boucle for ca fonctionne, mais si tu fais un echo %mod% hors de la boucle for tu vas avoir en réponse echo on, réponse de la console quand la variable est vide...

Voilà j'espère que cela t'aidera.

Bon courage.
Répondre