[R] $CmdLine & $CmdLineRaw

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

[R] $CmdLine & $CmdLineRaw

#1

Message 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
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#2

Message 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.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#3

Message 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.
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é".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#4

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

Re: [..] $CmdLine & $CmdLineRaw

#5

Message par Tlem »

Heuuu, un peut plus d'explication s'il te plaît ani.
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é".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#6

Message 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 ;)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#7

Message 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à ^^'
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#8

Message 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
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é".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#9

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

Re: [..] $CmdLine & $CmdLineRaw

#10

Message 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. ;)
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é".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#11

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

Re: [..] $CmdLine & $CmdLineRaw

#12

Message 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:
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é".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] $CmdLine & $CmdLineRaw

#13

Message 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 ;)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [R] $CmdLine & $CmdLineRaw

#14

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

Re: [R] $CmdLine & $CmdLineRaw

#15

Message par Tlem »

Pas de code ...
C'est pas bien !!!
Hoouuuu le vilain modérateur. :P
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é".
Répondre