IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Passage d'arguments en ligne de commandes à un script, problème d'ordre - WScript.Argument


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut Passage d'arguments en ligne de commandes à un script, problème d'ordre - WScript.Argument
    OS: Win7 64bits

    Bonjour,

    Problème dans l'ordre de traitement des fichiers lorsqu'on passe une sélection de fichiers à script vbs.


    Dans Explorer, je choisi un groupe de fichiers avec la souris et SHIFT, disons les fichiers B à F au sein du répertoire contenant les fichiers A à G:
    A.txt
    B.pdf
    C.pdf
    D.jpg
    E.pdf
    F.doc
    G.txt

    Puis, je place ma souris au sein de cette sélection, par-exemple, au-dessus du fichier D.jpg et je fais un click droit pour "envoyer vers" et je choisis mon script vbs que j'ai développé.

    Ce script prend les arguments comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for idx = 1 To WScript.Arguments.Count -1
    	MsgBox WScript.Arguments(idx)
    Next
    Surprise, l'ordre n'est pas B, C, D, E, F
    mais
    E,F,B,C,D


    Comment avoir l'ordre B,C,D,E,F?

    Si j'avais sélectionné dans l'ordre inverse F à B et que je clique droit au sein de la sélection je veux aussi F à B.

    C'est-à-dire, l'ordre du premier et dernier fichier sélectionner, détermine l'ordre de traitement, mais au sein de la sélection si je fais le click droit pour "envoyé vers" cela ne doit pas déterminer un nouveau pointeur.

    Merci.

  2. #2
    Membre actif
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    En d'autres termes

    WScript.Arguments(0) à pour valeur la où se trouvait la souris au moment du click droit

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Si on fait un tri des fichiers avant de les envoyer au script, cela marche (sans y inclure le fichier d'index 0).
    Une condition peut être ajoutée sur la casse : minuscule / majuscule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
        Option Explicit 
     
        Dim I, Tb(30), n
     
        For i =   Wscript.Arguments.Count - 1 to 1 Step - 1
           'MsgBox WScript.Arguments(i)
           Tb(i) = WScript.Arguments(i)
        next
         n = Wscript.Arguments.Count - 1
          Tri n, Tb
          For i = UBound(Tb) To LBound(Tb) Step - 1
            If Tb(i) <> "" Then MsgBox Tb(i)
          Next
        'Il faut faire un tri avant l'envoi au script
        '=========================
        Sub Tri(m,Tb)
           Dim i, pos, j, aux
             FOR i = 2 TO m 
                  pos = i-1
                  ' Si on veut un tri avec respect de la casse, on doit enlever le 'LCase' de la ligne suivante
                  WHILE (pos>=1) and (LCase(Tb(pos)) < LCase(Tb(i)))
                      pos= pos-1
                  Wend
                  pos = pos + 1
                  aux = (Tb(i))
                  FOR j = (i-1) To  pos Step -1
                      Tb(j+1) = Tb(j)
                  Next
                  Tb(pos) = aux
            Next
        End Sub
        '==========================='
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  4. #4
    Membre actif
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Merci, mais je comprends pas ni la logique, ni comment l'implémenter.

    >Si on fait un tri des fichiers avant de les envoyer au script
    On est dans Win Explorer
    1/ on sélectionne un groupe de fichier et on veut l'ordre qu'on voit dans explorer (çà pourrait être un tri par nom, par date, par type de fichiers, etc.)
    2/ on fait un click droit pour avoir "envoyer vers" et on choisit le script.

    la liste/tableau WScript.Arguments contient la liste des fichiers, mais dont le premier élément WScript.Arguments(0) n'est autre que le fichier au-dessus duquel le pointeur de souris se trouvaient.

    Il n'y a pas moyen de connaître les premier et dernier fichiers cliqués?

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    En suivant la même logique que j'ai lue dans ton post, j'ai choisi le tri par nom, et dans la même ligne, j'ai omis le fichier d'index 0 comme dans ton code.
    Si on veut un autre type de tri, c'est une autre paire de manches : si par exemple on veut un tri selon la date de dernier accès, de modification ou de création, il faut d'abord lire ces infos depuis les fichiers puis les classer selon ces infos.

    Maintenant, si on inclut le fichier d'index 0 (celui sur lequel on fait un clic droit), l'affichage se fait de la manière suivante : d'abord le fichier d'index 0, puis tous les fichiers qui le suivent(ordonnés alphabétiquement avec prise en compte de la casse) ensuite les fichiers qui le précèdent(ordonnés eux aussi).
    Avec le tri, on obtient le fichier d'index 0 puis tous les autres ordonnés selon le critère de tri.
    On n'y peut rien : c'est un caprice de l'explorateur et ce quel que soit le sens de la sélection : vers l'avant / l'arrière (avec ou sans tri)

    Pour l'implémentation du code dans le script final, il faut faire le traitement(par une Sub ou une fonction) à la place du MsgBox.
    Il n'y a pas moyen de connaître les premier et dernier fichiers cliqués?
    S'agit-il du premier et du dernier fichiers dans la sélection ou dans l'affichage ?
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Pour ma part j’admets que l'explorateur place les fichiers dans un ordre qui pourrait paraitre illogique, mais j'y voit un intérêt.

    Lorsque je veux copier 10 films :
    - je les sélectionnes (a,b,c,d,e,f,g,h,i,j)
    - J'ai un besoin particulier je souhaite qu'il copie en premier le film 'b' car je veux le voir de suite.
    - Je fait mon clic droit sur le film 'b' puis copier, cette action le placera en tête des fichier à copier.
    - Puis coller il commencera par 'b'.

    Je ne sais pas combien d'autres personnes ce serve de cette 'astuce' il semble que je soit le seul.

    C'est donc l'explorateur qui modifie volontairement l'ordre.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2010, 20h04
  2. Réponses: 27
    Dernier message: 14/12/2006, 19h49
  3. [VB.NET]Argument en ligne de commande
    Par Fayoul dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2006, 12h27
  4. taille max des arguments en ligne de commande
    Par clepape dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2005, 13h18
  5. Réponses: 3
    Dernier message: 07/04/2003, 20h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo