Commande Run ou ShellExecute avec des pipes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Izarra6492
Niveau 1
Niveau 1
Messages : 6
Enregistré le : sam. 21 mars 2020 12:26
Status : Hors ligne

Commande Run ou ShellExecute avec des pipes

#1

Message par Izarra6492 »

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 !
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 342
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: Commande Run ou ShellExecute avec des pipes  

#2

Message par franco »

Salut.
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 !!
Tu t'y prends mal... ^^


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)
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 :
MdNj5Gt.png

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)

++
L'entraide, c'est mon dada ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Commande Run ou ShellExecute avec des pipes

#3

Message par Tlem »

@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.
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é".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Commande Run ou ShellExecute avec des pipes

#4

Message par Tlem »

@Izarra6492
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é".
Izarra6492
Niveau 1
Niveau 1
Messages : 6
Enregistré le : sam. 21 mars 2020 12:26
Status : Hors ligne

Re: Commande Run ou ShellExecute avec des pipes

#5

Message par Izarra6492 »

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 :)
Répondre