Bonjour à tous
j'utilise Autoit que j'adore depuis plusieurs années, et j'ai toujours eu quelques soucis avec les commandes Run ou ShellExecute
je voulais profiter de cette période de confinement pour approfondir cela
En gros, j'ai de nombreux fichiers de scripts au format BAT qui fonctionnent très bien et je voudrais construire l'équivalent avec AutoIT
j'ai réussi à le faire du moment que les commandes MS/DOS sont simples!
mais dès qu'il y a des pipes ou des boucles de type 'For %%A in ... ', ça se complique
le premier problème que je rencontre est surtout au niveau compréhension de quelle commande Autoit utiliser !
Plutot Run ou plutot ShellExecute ?
;Quand on en mode Batch, en boite DOS
;Ci dessous la Commande qui fonctionne correctement dans un batch
; et qui me permet de récupérer le Modèle d'ordinateur dans mon batch
;------------------------------------
;For /f "tokens=2 delims==" %%i in ('wmic csproduct get name /value') do Set Result=%%i
;------------------------------------
;Quand on est en mode AutoIT
;La fonction ci dessous fonctionne correctement
;Run("cmd /c for /f %A in ('dir /b ^| sort') do echo %A")
;Run("cmd /c for /f %A in ('wmic csproduct get name /value') do echo %A &pause")
;La commande ci dessous ne MemGetStatsrche pas !!!!
Run("cmd /c 'For /f "tokens=2 delims==" %%i in ('wmic csproduct get name /value') do Set Result=%%i'")
;en fait je voudrais pouvpoir lancer cette commande depuis autoit et que la valeur soit retournée dans une variable !!
merci de votre aide !
Commande Run ou ShellExecute avec des pipes
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 1
- Messages : 6
- Enregistré le : sam. 21 mars 2020 12:26
- Status : Hors ligne
- franco
- Niveau 7
- Messages : 343
- Enregistré le : lun. 03 oct. 2011 22:37
- Localisation : Liévin
- Status : Hors ligne
Re: Commande Run ou ShellExecute avec des pipes
Salut.
Donc, tu veux que le résultat d'une commande, soit dans une variable.
C'est faisable, facilement, quand on recherche sur google, mais surtout quand on utilise les bons termes...
Exemple : https://www.google.com/search?client=fi ... +in+string
Je recherche souvent en anglais, je trouve qu'il y a plus de résultats, quand la demande est un poil technique...
Un exemple concret :
Je liste tous les SSID (réseau wifi) que j'ai pu me connecté.
Sinon, tu cherches à trouver quelles valeurs ?
Je pourrais tester et voir si on peut faire plus simple.
Ne fait pas compliqué, car, une fois que tu as le résultat dans la variable, rien ne t'empeche de travailler sur la variable, au lieu de rendre complexe la ligne de commandes.
EDIT :
En fait, seul la ligne de commandes wmic csproduct get name /value est utile dans notre cas.
Car en gros, tu as qu'une seule ligne exploitable.
en image :
Teste ce dernier script :
++
Tu t'y prends mal... ^^Run("cmd /c 'For /f "tokens=2 delims==" %%i in ('wmic csproduct get name /value') do Set Result=%%i'")
;en fait je voudrais pouvpoir lancer cette commande depuis autoit et que la valeur soit retournée dans une variable !!
Donc, tu veux que le résultat d'une commande, soit dans une variable.
C'est faisable, facilement, quand on recherche sur google, mais surtout quand on utilise les bons termes...
Exemple : https://www.google.com/search?client=fi ... +in+string
Je recherche souvent en anglais, je trouve qu'il y a plus de résultats, quand la demande est un poil technique...
Un exemple concret :
Code : Tout sélectionner
$cmd1 = 'netsh wlan show profiles | Findstr .Profil'
Local $nPid = Run(@ComSpec & " /c " & $cmd1, "", @SW_HIDE, 8), $ListeSSID = ""
ProcessWait($nPid)
While 1
$ListeSSID &= StdoutRead($nPid)
If @error Or (Not ProcessExists($nPid)) Then ExitLoop
WEnd
MsgBox(0,"",$ListeSSID)
Sinon, tu cherches à trouver quelles valeurs ?
Je pourrais tester et voir si on peut faire plus simple.
Ne fait pas compliqué, car, une fois que tu as le résultat dans la variable, rien ne t'empeche de travailler sur la variable, au lieu de rendre complexe la ligne de commandes.
EDIT :
En fait, seul la ligne de commandes wmic csproduct get name /value est utile dans notre cas.
Car en gros, tu as qu'une seule ligne exploitable.
en image :
Teste ce dernier script :
$cmd2 = 'wmic csproduct get name /value'
Local $nPid = Run(@ComSpec & " /c " & $cmd2, "", @SW_HIDE, 8), $values = "",$valeur=""
ProcessWait($nPid)
While 1
$values &= StdoutRead($nPid)
If @error Or (Not ProcessExists($nPid)) Then ExitLoop
WEnd
For $a = 1 to StringSplit($values,@LF)[0]
if StringStripWS(StringSplit($values,@LF)[$a],3) <> '' then $valeur = stringStripWS(StringSplit($values,@LF)[$a],3)
Next
MsgBox(0,"",$valeur)
Local $nPid = Run(@ComSpec & " /c " & $cmd2, "", @SW_HIDE, 8), $values = "",$valeur=""
ProcessWait($nPid)
While 1
$values &= StdoutRead($nPid)
If @error Or (Not ProcessExists($nPid)) Then ExitLoop
WEnd
For $a = 1 to StringSplit($values,@LF)[0]
if StringStripWS(StringSplit($values,@LF)[$a],3) <> '' then $valeur = stringStripWS(StringSplit($values,@LF)[$a],3)
Next
MsgBox(0,"",$valeur)
++
L'entraide, c'est mon dada 

- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: Commande Run ou ShellExecute avec des pipes
@franco
Bonjour, pour les images, évitez de les placer sur un site externe, car au bout d'un certain temps, ces images deviennent inaccessibles, du coup certains messages perdent de leur intérêt. J'ai modifié votre message précédent. ^^
Bonne journée.
Bonjour, pour les images, évitez de les placer sur un site externe, car au bout d'un certain temps, ces images deviennent inaccessibles, du coup certains messages perdent de leur intérêt. J'ai modifié votre message précédent. ^^
Bonne journée.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: Commande Run ou ShellExecute avec des pipes
@Izarra6492
Vous avez aussi la possibilité de fouiller la base de registre ...
Extrait du code de System_Info.au3 par wimb
Vous avez aussi la possibilité de fouiller la base de registre ...
Extrait du code de System_Info.au3 par wimb
Code : Tout sélectionner
$cpu = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")
$Number_Cores = EnvGet("NUMBER_OF_PROCESSORS")
$Mobo_Manufacturer = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardManufacturer")
$Mobo_Product = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct")
$UUID = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\HardwareConfig", "LastConfig")
$RAM = Round(_GetPhysicallyInstalledSystemMemory()/1024/1024)
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
-
- Niveau 1
- Messages : 6
- Enregistré le : sam. 21 mars 2020 12:26
- Status : Hors ligne
Re: Commande Run ou ShellExecute avec des pipes
Merci Franco !
ca répond très bien à ma demande du coup
je ne pensais pas reporter la complexité de la cmdline dans autoit
mais comme tu dis, on peut travailler comme on veut ensuite dans Mega Autoit !
super
merci encore
ca répond très bien à ma demande du coup
je ne pensais pas reporter la complexité de la cmdline dans autoit
mais comme tu dis, on peut travailler comme on veut ensuite dans Mega Autoit !
super
merci encore
