Page 1 sur 1

Commande Run ou ShellExecute avec des pipes

Posté : sam. 21 mars 2020 13:29
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 !

Re: Commande Run ou ShellExecute avec des pipes  

Posté : dim. 22 mars 2020 10:47
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)

++

Re: Commande Run ou ShellExecute avec des pipes

Posté : dim. 22 mars 2020 11:48
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.

Re: Commande Run ou ShellExecute avec des pipes

Posté : dim. 22 mars 2020 12:34
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)

Re: Commande Run ou ShellExecute avec des pipes

Posté : dim. 22 mars 2020 18:44
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 :)