Page 1 sur 1

[R] $CmdLine & $CmdLineRaw

Posté : mar. 24 mars 2009 22:23
par ani
Bonjour tout le monde,

Pour un projet, j'aurai besoin d'attribuer divers parametre comme on peut le voir sous ms-dos.
je prend un exemple avec dir

Code : Tout sélectionner

DIR [lecteur:][chemin][nom_de_fichier] [/A[[:]attributs]] [/B] [/C] [/D] [/L]
  [/N] [/O[[:]tri]] [/P] [/Q] [/S] [/T[[:]heure]] [/W] [/X] [/4]
Le switch /A posséde plusieur paramètre comment le reproduire ceux-ci sous autoit ?

merci d'avance

Re: [..] $CmdLine & $CmdLineRaw

Posté : mar. 24 mars 2009 22:47
par sylvanie
Bonsoir Ani,
admettons que le programme compilé se nomme toto et qu'il puisse prendre comme argument /A: suivit de D, H ... comme dir pour fixer les idées (et éventuellement d'autres qu'on ne sitera pas).
alors l'appel
toto /A:DH
va passer /A:DH comme un argument unique en $CmdLine[1]
dans ce cas, il suffit de s'assuré que $CmdLine[1] commence bien par /A: (au cas où il y aurait d'autres arguments que l'on peut permuter comme dans DIR), puis décomposer le reste de la chaîne en caractère unique pour le traiter dans un switch case.

Re: [..] $CmdLine & $CmdLineRaw

Posté : mar. 24 mars 2009 22:57
par Tlem
Je vois que Sylvanie m'à légérement devancé pendent la rédaction de mon message. :P
Mais je rajoute tout de même ma réflexion :


Tout simplement en analysant la ligne.

En l'occurrence pour le switch /A, celui-ci doit se comporter de la sorte :
/A:D
ou
/A:HR
ou
/A:-D
etc ...

Nous avons donc le commutateur /A: suivit des lettres :
D, H, S, R, ou A.
Chacune de ces lettres peut être précédée du préfixe de négation.
Chaque lettre (avec ou sans préfixe) doit être collée au commutateur et donc si un espace est rencontré, cela signifie la fin du commutateur.

on à donc juste à lire ce qui ce trouve entre /A: et le premier espace trouvé.

Lors de la lecture des attributs, deux cas peuvent ce poser :
On rencontre un - et donc l'attribut qui suit est 'négatif' sinon l'attribut est positif.

Re: [..] $CmdLine & $CmdLineRaw

Posté : jeu. 16 avr. 2009 11:33
par ani
Oups, j'avais oublié le sujet :P (vu 40 fois whouaaa) ;)
Pour le moment je reflechis au cmd possible, mais pas evident, j'avais pensé a splitter entre le sépateur :

Autre question, peut on utilisé les parametre dos avec les futur cmd dos ?
genre utilisé les cmd existante comme find et les redirection > >> ect ?

merci ;)

Re: [..] $CmdLine & $CmdLineRaw

Posté : jeu. 16 avr. 2009 18:21
par Tlem
Heuuu, un peut plus d'explication s'il te plaît ani.

Re: [..] $CmdLine & $CmdLineRaw

Posté : jeu. 16 avr. 2009 18:33
par ani
veuillez m'excuser ;)

N'ayant rien sous les yeux .
Cmd non officiel dos | Parametre (switch) | Cmd dos (utilitaire+redirection)
maCommande /list > list.txt
maCommande /list | find "truc"
ect...

vais dl autoit vu que j'ai oublié ma cléusb :(

encore merci ;)

Re: [..] $CmdLine & $CmdLineRaw

Posté : sam. 25 juil. 2009 17:23
par ani
Encore une confrontation :(

sur un des utilitaires, le faite de déplacer un fichier sur l'exe, permettait d'excuter la fonction.

Code : Tout sélectionner

if $cmdline[0] = 1 then
    $f = $cmdline[1]
else
   $f = fileopendialog(...)
endif
mon.exe "fichier"

Le soucis maintenant c'est comment fait-on pour l'envoie de plusieurs fichiers (le deplacement des fichiers vers l'exe), plutot la valeur retourné ? car avec la fonction 1 il me renvoi absolument rien (j'ai compris qu'il prend un seul parametre)
mon.exe "fichier1...2...3...4"

après j'attribué des switch, pour le moment j'en suis plus là ^^'

Re: [..] $CmdLine & $CmdLineRaw

Posté : sam. 25 juil. 2009 17:33
par Tlem
Pas sur d'avoir tout compris, mais au cas ou :

Code : Tout sélectionner

If $cmdline[0] Then
    MsgBox(0, "Traitement à faire sur la chaine", $cmdlineraw)
Else
    $f = FileOpenDialog(...)
EndIf

Re: [..] $CmdLine & $CmdLineRaw

Posté : sam. 01 août 2009 18:42
par ani
a bein oui cmdlineraw ^^" pas lu la doc :(
la je suis confronté toujours au même problème, splitter la ligne trop complexe a faire, surtout quand y a des espace.
exemple:
mon.exe "c:\www\param\Example execute.bin" c:\www\param\Example.bat

chez microsoft il parle de la fonction dragqueryfile (lib:shell32), mais bon là suis pas expert.

Surtout que les exe que je concoit n'ont aucune interface juste le cmdline et openfiledialog :(

si vous avez une info :)

merci

Re: [..] $CmdLine & $CmdLineRaw

Posté : sam. 01 août 2009 19:47
par Tlem
Généralement, lorsque l'on veut utiliser les paramètres de la ligne de commande, il vaut mieux être quelque peut organisé.

On lance l'exécutable avec X paramètres (X étant non définit).
Choix N° 1 :
- MonExe.exe "paramètre 1" "paramètre 2" "paramètre 3" "paramètre 4" "..."

Choix N° 2 :
- MonExe.exe /A:paramètre 1 /B:paramètre 2 /C:paramètre 3 /D:paramètre 4

Choix N° 3 :
- MonExe.exe paramètre 1|paramètre 2|paramètre 3|paramètre 4

Voilà. On peut aisément imaginer d'autres styles d'envois de paramètres, mais, il n'y à pas d'autre solutions (simple) en dehors de s'organiser une structure qui sera facilement traité par un StringSplit ou la recherche d'un commutateur.

La solution du commutateur à cela de bien que chaque élément peut être envoyé dans l'ordre que l'on souhaite.
- MonExe.exe /C:paramètre 3 /D:paramètre 4 /B:paramètre 2 /A:paramètre 1

J'espère avoir répondu à tes interrogations. ;)

Re: [..] $CmdLine & $CmdLineRaw

Posté : mer. 05 août 2009 09:55
par ani
oui la dessus j'ai bien suivit, mais j'arrive pas a exprimer la demande :(
on va mettre çà en image :o

Image

on remarque dans le détails qu'on séléctionne 2 élèments.
la sortie de cmdlineraw nous sort

Code : Tout sélectionner

"F:\AUTOIT_SCRIPT\WWW\Param\Example execute.bin" F:\AUTOIT_SCRIPT\WWW\Param\Example.bat
si pas, je laisse tomber la selection de fichier multiple enfin çà serait dommage :§
j'ai posé la question sur le fofo anglais et là idem zont rien suivit looool vive ani :p


Edit:vla la solution, c'était vraiment f&acile :(

MsgBox(0, '', $cmdlineraw)

Code : Tout sélectionner

For $i = 1 To $cmdline[0]
    If FileExists($cmdline[$i]) Then
        MsgBox(0, '', $cmdline[$i])
    EndIf
Next
bon maintenant je passe au cmdline :)
a touti santi ;)

Re: [..] $CmdLine & $CmdLineRaw

Posté : mer. 05 août 2009 10:58
par Tlem
Si ton problème c'est le traitement de la ligne $CmdLineRaw à cause des guillemets sur les noms de fichiers avec espace, alors pourquoi n'utilise tu pas directement le tableau des arguments ?

Code : Tout sélectionner

#include <array.au3>

If $cmdline[0] Then
    _ArrayDisplay($cmdline,"Tableau de la liste des arguments")
Else
    $f = FileOpenDialog("", "", "Tous (*.*)", 5 )
EndIf
Comme on le dit parfois : Je ne comprend pas pourquoi tu veut te suicider avec un concombre plat !!! :lol: :lol: :lol: :lol: :lol:

Re: [..] $CmdLine & $CmdLineRaw

Posté : mer. 05 août 2009 12:02
par ani
Pourquoi ?
déjà je n'y avait pas pensé,
de deux comme on le remarque j'ai de plus en plus de mal à m'exprimer,
alors qu'avec une image tout le monde comprend ^^'

déjà je partais avec la documentation de microsoft qui parlé de la fonction dragqueryfile ;)
et pourtant la solution était fort simpliste :(

:oops: :oops:

bon allez zou :)

encore merci ;)

Re: [R] $CmdLine & $CmdLineRaw

Posté : jeu. 06 août 2009 20:14
par ani
Surement que je m'y prend mal, mais lors de la compilation en mode console si je clique ou double clique sur l'exe j'ai la console ms-dos qui se lance et evidement ce n'est pas le but, vu qui y a la boîte de dialogue qui demande de selectionner un fichier :(

Pourquoi avoir activé le mode console (aut2exe), j'utilise des consolewrites et d'après la doc c'est le seul moyen pour que çà s'affiche dans ms-dos.

y aurait'il une autre méthode ? le StdinWrite
Soit par ms-dos ou la boite de dialogue ?

encore désolé :(

Re: [R] $CmdLine & $CmdLineRaw

Posté : jeu. 06 août 2009 22:39
par Tlem
Pas de code ...
C'est pas bien !!!
Hoouuuu le vilain modérateur. :P