[R] Run()- Passage de paramètres et quotes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Thierry92
Niveau 1
Niveau 1
Messages : 5
Enregistré le : dim. 19 juin 2011 22:48
Status : Hors ligne

[R] Run()- Passage de paramètres et quotes

#1

Message par Thierry92 »

Bonjour à tous et merci d'avance à ceux qui tenteront de m'aider.

Voilà je débute avec AutoIt et j'ai passé mon après midi sur un problème qui ne doit pas être si compliqué...pour autant malgré de multiples recherches (ici et ailleurs) et de multiples tentatives je n'arrive pas à mes fins.

J'essaye simplement de lancer un exécutable en utilisant certains paramètres...mais c'est là que je dois me planter quelque part :

les variables :
$lettre = "d:"
$tool = "d:\Outils\Ntfswalk\ntfswalk.exe"
$sortie = "d:\resu\Mft\MFT_donnees.txt"

La commande qui fonctionne en lançant le programme depuis "cmd.exe" et que j'aimerais "reproduire" avec autoIT :
D:\Outils\Ntfswalk\ntfswalk.exe -partition d:\ -out "d:\resuall\Mft\MFT_donnees.txt" -action_include_timestamps

j'ai essayé en lançant la commande run() sans et avec les variables mais rien n'y fait. Je crois que je me plante avec les quotes simples et doubles. Au mieux je lance le programme "ntfswalk" mais il ne prends pas en compte les paramètres... :

l'une de mes tentatives :

Code : Tout sélectionner

RunWait( @ComSpec &  ' /k ' & $tool & ' -partition ' & $lettre & ' -out ' & '"' & $sortie & '"' & ' -action_include_timestamps', "", @SW_MAXIMIZE)
En passant je ne comprends pas les imbrications des quotes simples et doubles dans cet exemple :

Run($SunVirtualBox & '\VBoxManage.exe clonehd " ' & $IniSource & ' " " ' & $IniDestination & ' " ', $SunVirtualBox, @SW_HIDE)

si je comprends bien les chaines de caractères sont encadrées par des simples quotes et les variables par des doubles quotes qui sont insérées dans la chaine qui précède et celle qui suit la variable...c'est bien cela ?

J'en profite pour poser quelques questions et demander quelques éclaircissement :

- J'ai vu que pour lancer un exécutable on pouvait utiliser "run()' ou même "Shellexecute() : a priori seul le second utilise l' API Shellesecute pour autant je ne vois pas bien ce que cela change en pratique.
- Dans la même veine, RunWait( @ComSpec...) est recommandé pour lancer des commandes internes (dir...)...mais j'ai trouvé pas mal d'exemples ou il servait aussi à lancer des programmes tiers ... c'est quoi la différence réelle ?

Je sais que cela fait beaucoup de questions...d'avance merci :)

Thierry
Modifié en dernier par Thierry92 le lun. 20 juin 2011 13:23, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Run()- Passage de paramètres et quotes

#2

Message par Tlem »

Bonsoir Thierry. :mrgreen:

Perso, je ferait ceci :

Code : Tout sélectionner

RunWait(@ComSpec & ' /k "' & $tool & '" -partition ' & $lettre & '\ -out ' & '"' & $sortie & '"' & ' -action_include_timestamps', "", @SW_MAXIMIZE)
J'ai rajouté les doubles quotes autour du nom du programme au cas ou un jour il y aurait un espace dans le nom ou le chemin. ;)
Ensuite d'après votre ligne de commande, il manquait dans votre code '\' après la lettre de lecteur. Je ne sait pas si ça à une importance, mais si ça fonctionne, c'est que ça en avait. :roll:

Ensuite, en ce qui concerne l'imbrication des simples et doubles quotes, il est vrai que parfois, c'est un vrai casse tête, mais au final si vous décomposé, tout est logique.
Dans l'exemple que vous donnez, essayez de décomposer chaque partie en remplacent les variables par leurs valeur et en supprimant de part et d'autre les caractère ' et &.
En fait, les variables ne sont pas encadrées par des doubles quotes, en l’occurrence, elles sont utilisées pour être envoyée à la commande externe.

Si vous faites :

Code : Tout sélectionner

Run("C:\Program Files\7-Zip\7zFM.exe")
Run('C:\Program Files\7-Zip\7zFM.exe')
les deux commande sont équivalente, et la chaîne envoyée sera :

Code : Tout sélectionner

C:\Program Files\7-Zip\7zFM.exe
Par contre, si vous faites :

Code : Tout sélectionner

Run('"C:\Program Files\7-Zip\7zFM.exe"')
Run("'C:\Program Files\7-Zip\7zFM.exe'")
les deux commandes ne sont pas équivalente. L'une vous renverra :

Code : Tout sélectionner

"C:\Program Files\7-Zip\7zFM.exe"
et l'autre

Code : Tout sélectionner

'C:\Program Files\7-Zip\7zFM.exe'
et là, du point de vue de l'interpréteur de commande, ce n'est pas la même chose.

N'oubliez pas que dans la plupart des systèmes informatique, si vous ne délimitez pas vos chaînes, alors elles peuvent être décomposées et considérées comme autant d'argument. ;)
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é".
Thierry92
Niveau 1
Niveau 1
Messages : 5
Enregistré le : dim. 19 juin 2011 22:48
Status : Hors ligne

Re: [..] Run()- Passage de paramètres et quotes

#3

Message par Thierry92 »

EDIT :

Je suis trop c...
Cet utilitaire nécessite les droits admin et je le lançais depuis SciTE sans les droits admin...donc Bug qui n'avait rien à voir avec les paramètres...

le seul problème qui reste c'est que si je mets des double quotes au chemin de l'exécutable cmd ne le trouve plus...c'est pas grand chose mais je vais chercher un peu ;)

Merci pour l'aide...

Thierry

------- ------ ------- ------

Bonjour et merci pour cette réponse très rapide.... ;)

J'ai essayé ton code mais malheureusement cela ne marche pas....

J'ai enlevé les double quotes pour l'exécutable...mais j'en reviens au même point...les paramètres ne sont pas pris en compte...fait suer :?

Je continue à chercher...mais toutes les idées sont les bienvenues ! :mrgreen:

Thierry
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Run()- Passage de paramètres et quotes

#4

Message par Tlem »

J'ai décomposé pour que vous voyez :

Code : Tout sélectionner

$lettre = "D:"
$tool = "D:\Outils\Ntfswalk\ntfswalk.exe"
$sortie = "D:\resuall\Mft\MFT_donnees.txt"

; Ligne de référence : D:\Outils\Ntfswalk\ntfswalk.exe -partition D:\ -out "D:\resuall\Mft\MFT_donnees.txt" -action_include_timestamps
$LigneCmd = $tool & ' -partition ' & $lettre & '\ -out ' & '"' & $sortie & '"' & ' -action_include_timestamps'
MsgBox(0, '', $LigneCmd)

RunWait( @ComSpec &  ' /k ' & $LigneCmd, "", @SW_MAXIMIZE)
Chez moi, sur mon XP Pro en tant qu'administrateur, ce script fonctionne très bien.

Si vous voulez les guillemets, la ligne semble devoir être écrite de la sorte :

Code : Tout sélectionner

$LigneCmd = '"' & $tool & ' -partition ' & $lettre & '\ -out ' & '"' & $sortie & '"' & ' -action_include_timestamps' & '"'
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é".
Thierry92
Niveau 1
Niveau 1
Messages : 5
Enregistré le : dim. 19 juin 2011 22:48
Status : Hors ligne

Re: [R] Run()- Passage de paramètres et quotes

#5

Message par Thierry92 »

Merci beaucoup pour ces précisions...ça marche ;)

Allez maintenant je m'attaque aux tableaux et le parcours d'un fichier...

Bonne fin de soirée

Thierry
Répondre