Page 1 sur 3

[R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 09:47
par Laddy
Bonjour à tous,

j'ai une petite question :

En batch nous pouvons glisser un ou des fichiers sur un exécutable compilé, grâce à %1 qui lance l'action demandé exemple déplacer des fichiers.
Peut on faire la même chose en autoit ?

Je glisses (drop and drag) mes fichiers sur l'exécutable, et exécute l'action choisi sans l'ouvrir ?
Merci

Bonne fête de Noël à tous

Laddy

Re: [..] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 10:12
par moutelous
Bonjour,

Ben, sachant que "$CmdLine[1]" remplace les variables du type "%1", oui ......

Re: [..] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 10:27
par Laddy
moutelous a écrit :Bonjour,

Ben, sachant que "$CmdLine[1]" remplace les variables du type "%1", oui ......
Bonjour moutelous,

$cmdLine j'ai regardé cette commande, et si j'ai bien compris elle permet de mettre un paramètre sur un executable.

"chemin\fichier.exe" /param par exemple que l'on peut taper dans démarrer -> executer

mais pour le drop and drag je ne vois pas comment faire, aurais tu un exemple ?

Genre je glisse un txt sur mon exe et il est déplacé dans Mes documents.

Re: [..] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 10:41
par FernandG
Bonjour,

Moutelous vous donnait la solution pourtant :wink:

Neanmoins, voici en exemple concret :

Code : Tout sélectionner

Dim $parametre
If $CmdLine[0] Then
    For $i = 1 To $CmdLine[0]
        $parametre &= $i & " : " & $CmdLine[$i] & @CRLF
    Next
    MsgBox(64, "Information", "Nombre(s) de paramètre(s) : " & $CmdLine[0] & @CRLF & @CRLF & $parametre)
Else
    MsgBox(16, "Information", "Aucun paramètre n'a été transmis.")
EndIf
Exit
Compilez le et procèdez à un "drop & drag" de un ou plusieurs fichiers sur le fichier compilé.

Je pense que vous comprendrez mieux le fonctionnement :wink:

Bonne journée.
AutoItement.

Re: [..] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 10:51
par FernandG
Laddy a écrit :
moutelous a écrit :mais pour le drop and drag je ne vois pas comment faire, aurais tu un exemple ?

Genre je glisse un txt sur mon exe et il est déplacé dans Mes documents.
Pour répondre à votre demande :

Code : Tout sélectionner

If $CmdLine[0] = 1 Then
    If StringRight($CmdLine[1], 4) = ".txt" Then
        FileCopy($CmdLine[1], @MyDocumentsDir, 1)
    Else
        MsgBox(16, "Information", "Erreur : " & $CmdLine[1] & " n'est pas un fichier "".txt"" !!!")
    EndIf
EndIf
Exit
Exemple adapté à un seul fichier mais peut être adapté à souhait.

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 11:02
par Laddy
Merci FernandG
c'est exactement ce que je voulais. Un exemple concret.

Bonnes fêtes de fin d'année

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:20
par Laddy
Re,

Pourquoi me prend t il que le dernier fichier copié ?

Code : Tout sélectionner

If $CmdLine[0] Then
    If StringRight($CmdLine[1], 4) = ".txt" Then
        For $i = 1 To $CmdLine[1]
        FileCopy($CmdLine[1], @MyDocumentsDir, 1)
        Next
EndIf
Else
    MsgBox(16, "Information", "Aucun paramètre n'a été transmis.")
EndIf
Exit
 
Quel est mon erreur ?
Pour chaque paramètre copié le fichier ou les fichiers vers Mes documents

J'ai testé ceci aussi

Code : Tout sélectionner

If $CmdLine[0] Then
    If StringRight($CmdLine[1], 4) = ".txt" Then
        For $i = 1 To $CmdLine[1]
        FileCopy($CmdLine[$i], @MyDocumentsDir, 1)
        Next
EndIf
Else
    MsgBox(16, "Information", "Aucun paramètre n'a été transmis.")
EndIf
Exit
 
ça ne fonctionne plus

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:25
par zeshrek
3eme ligne, remplace
For $i = 1 To $CmdLine[1]
par
For $i = 1 To $CmdLine[0]


$CmdLine[1] est le 1er parametre de la ligne de commande, par contre si tu veux avoir le nombre de parametre passés (et donc les copier dans le cas de ton script) la boucle d'oit s'appuier sur le nombre de parametres passés, qui lui est stocké dans $CmdLine[0]

Edit : Attention, le if de la 2eme ligne ne rendra la copie possible que si le premier parametre passé est un fichier .txt
Donc comme je présume que tu veux copier tous les fichiers .txt dans ton rémertorie de documents, le script devrait donc etre :

Code : Tout sélectionner

If $CmdLine[0] Then
    For $i = 1 To $CmdLine[0]
        If StringRight($CmdLine[$i], 4) = ".txt" Then
            FileCopy($CmdLine[$i], @MyDocumentsDir, 1)
        EndIf
    Next
Else
    MsgBox(16, "Information", "Aucun paramètre n'a été transmis.")
EndIf
Exit

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:26
par Laddy
Bonjour Zeshrek force Orange,
J'ai testé sur les 2codes postés.

Le 1er : toujours qu'un fichier
le second : aucun fichier

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:27
par zeshrek
Et celui que je te met dans l'edit de ma réponse (j'étais en train de le poster quand tu as répondu)

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:28
par Laddy
Arf j'y étais presque effectivement mon for était mal placé.

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:31
par zeshrek
Classique erreur de débutant ;)

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 13:39
par Laddy
Oui, je vais compliquer la chose en créer des dossiers avant et déplacer d'autres fichiers ça promet...

Merci pour ta patience et tes explications.

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 14:18
par Laddy
Je suis vraiment une bille mais pourquoi ceci ne fonctionne pas

Si le paramètre à pour extension txt ou ini ou etc.... alors copier le fichier dans mes documents.
Je pense traduire mon français correctement en autoit cependant il me prend uniquement le second paramètre ini.

Code : Tout sélectionner

If $CmdLine[0] Then
    For $i = 1 To $CmdLine[0]
        If StringRight($CmdLine[$i], 4) = ".txt" OR ".ini" Then
            FileCopy($CmdLine[$i], @MyDocumentsDir &"\TXT", 1)
        EndIf
    Next
Else
    MsgBox(16, "Information", "Aucun paramètre n'a été transmis.")
EndIf
Exit
 
peut etre un problème de méthode

Merci d'avance à celui qui me répondra, vous m'aider beaucoup à progresser

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 14:33
par zeshrek
Normal, il y a une faute ligne 3
Ton if commence par évaluer si StringRight($CmdLine[$i], 4) = ".txt"
mettons que c'est effectivement un fichier txt, donc le résultat est true
ensuite il fait évalue true OR ".ini"
là ca veut rien dire donc résultat false, donc il passe au endif.
Tu pourrais faire :
If StringRight($CmdLine[$i], 4) = ".txt" OR StringRight($CmdLine[$i], 4) = ".ini" then
Mais alors bonjour si tu dois tester une demie douzaine d'extensions différentes, ta ligne serait vite incompréhensible.
Du coup il vaut mieux passer par un Swithc :

Code : Tout sélectionner

If $CmdLine[0] Then
    For $i = 1 To $CmdLine[0]
        $extension = StringLower(StringRight($CmdLine[$i], 4)) ; on prend l'extension, et on la passe en minuscule
        Switch $extension
            Case ".txt", ".ini" ; ca te permet de mettre plusieurs possibilités, séparés par des vircules
                FileCopy($CmdLine[$i], @MyDocumentsDir & "\TXT", 1)
            Case ".doc", "docx" ; on prend les documents Word
                FileCopy($CmdLine[$i], @MyDocumentsDir & "\Word", 1) ; par exemple si tu as fait un répertoire pour tes documents Word
            Case ".xls", "xlsx" ; on prend les documents Excel
                FileCopy($CmdLine[$i], @MyDocumentsDir & "\Excel", 1) ; par exemple si tu as fait un répertoire pour tes documents Excel
        EndSwitch

    Next
Else
    MsgBox(16, "Information", "Aucun paramètre n'a été transmis.")
EndIf
Exit

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 14:52
par moutelous
Bonjour,

Yes, ou alors évaluer le StringRight à une expression donc à (".txt" Or ".ini"), ce qui donne : If StringRight($CmdLine[$i], 4) = (".txt" OR ".ini").

Ça le fait aussi .... Mais honnêtement le "Switch" est plus "propre ..."

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 15:05
par zeshrek
moutelous, je suis pas sur que ta suggestion passe...
If StringRight($CmdLine[$i], 4) = (".txt" OR ".ini")
il fera donc (".txt" OR ".ini) qui ne veut rien dire (les opérations booléennes se font sur la valeur binaire des nombres) qui donnera donc false
et donc le test donnera
if StringRight($CmdLine[$i], 4) = false
ce qui ne peut donner qu'un resultat false donc zou... saut au endif

A moins que je me gourre...


(ps en tout cas merci de dire que ma solution est propre :D )

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 15:10
par moutelous
Ben non tu te gourre pas ! ....

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 15:17
par Laddy
Ah merci ZeShrek ;D C'est exactement ce que je cherchais à faire.

Re: [R] Déplacer un ou des fichiers sur un executable

Posté : ven. 24 déc. 2010 15:23
par zeshrek
La classe, ca s'explique pas. Ca se vit !
(la modestie aussi, comme vous l'aurez remarqué !)