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 :

Demande d'aide, recuperation de variable


Sujet :

VBScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Demande d'aide, recuperation de variable
    Bonjour,

    Alors voila, je débute (exactement 3 jours de formation VB dans les pattes, le petit livre bleu de M$ et jamais de programmation avant :/ ) et je me pose une question presque existentielle, à savoir:

    Est une possible de définir comme variable le fichier generé suite à une execution d'un programme via Wshscript.run.
    Pour être plus clair. j'ai fait un script qui dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WshShell.run "cmd /c D:\......\prog.exe arguments > D:\....\" & Nommachine & date & heure/log,,true
    Ce que j'aimerai, c'est savoir si je peux ensuite copier ce fichier à un autre endroit, mais pour cela, il faudrait que je donne un nom à cette commande.

    Et la, je sèche. J'aire de forum en forum, mais j'ai l'impression soit de ne pas voir ce qui est devant moi, soit de m'y être mal pris.

    (Je sais copier un fichier via ScriptingFileSystem dont le nom est connu, mais je ne sais pas rappeler un fichier avec un nom généré dans le vbs)

    J'espère avoir été un minimum clair, et que la réponse n'est pas "trop" évidente


    Merci d'avance



    Moi

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    En fait avant d'apprendre un langage, il faut apprendre la programmation.

    Là il te manque apparement plein de notion au vu de ta question.

    Et là pour t'expliquer tout cela, il me faudrait 1 semaines au moins. Que je sois un prof et que je t'explique le quoi, pourquoi, et comment.

    En plus que je ne suis même pas sur de ce que tu voulais dire par la fin de cette phrase :
    Ce que j'aimerai, c'est savoir si je peux ensuite copier ce fichier à un autre endroit, mais pour cela, il faudrait que je donne un nom à cette commande.
    Si je te dit :
    Pour gérer le système de fichier, VB utilises un objet du Système d'exploitation : FileSystemObject.
    Cet objet fournis des méthodes de copies, déplacements, créations, suppressions, ... de fichier.
    La méthode CopyFile copie un fichier donné en paramètre vers une destination aussi donnée en paramètre.
    Est ce que cela te parle ou est ce du chinois ?
    Dans le premier cas regarde la Faq VBScript de ce site, elle explique comment utiliser l'objet.
    Dans le deuxième cas, je suis désolé mais il faut soit continuer ta formation avant d'aller plus loin, soit prendre des cours de programmation.

    C'est une formation individuelle avec comme prof des sites et des bouquins ? Ou c'est une école ou une formation professionnel ?

    Quoi qu'il en soit, apprend la programamtion avant d'apprendre à programmer dans un langage spécifique.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette réponse, un organisme Formation 2433B, et disons que j'ai été "poussé" pour la suivre. Enfin bref, c'est une autre histoire.

    Je suis conscient d'avoir d'énorme lacunes, et je les comble(rai) au fil de l'eau.

    Pour en revenir à ta question, oui ça me parle. c'est un bon début non? ^^

    En fait je sais copier un fichier dont je connais le nom par cette méthode, mais c'est le lien entre le fichier qui est crée par la méthode run avec un nom défini en fonction de l'heure et la copie qui me pose pb.

    Est il possible de faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monfichier=WshShell.Run "cmd /c D:\...\...\......exe -s -x "  > logfile,,Wait_On_Return
    Ce qui permettrai de recuperer monfichier et de le coper avec
    SF.CopyFile monfichier,destination

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Pour en revenir à ta question, oui ça me parle. c'est un bon début non? ^^
    Oui, c'est déjà bien, au moins je sais que je peux t'expliquer des choses et que tu les comprendra.

    Mais je ne comprends pas où tu bloque, le nom du fichier tu le construits toi même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\....\" & Nommachine & date & heure/log
    d'ailleurs le /log me parait bizzare.

    En fait tu fait de la concaténation de chaine de caractère avec tes variables Nommachine, date, heure.
    Donc tu peux faire cela dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim CheminFichier
    CheminFichier = "D:\....\" & Nommachine & date & heure
    'j'ai enlevé le /log car j'ai un doute sur ce que tu veux faire avec
    Puis tu n'as pluqu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WshShell.run "cmd /c D:\......\prog.exe arguments > " & CheminFichier,,true
    Run est une méthode de l'objet Shell, qui est aussi un objet Windows. Il est générique et sert à lancer toute sorte d'exécutable.
    Il renvoit 0 si tu mets le dernier paramètre à false, et sinon il renvois ce que le programme qui l'a lancé lui a renvoyé.
    Pour plus d'info, encore la FAQ :
    http://vb.developpez.com/faqvbs/?page=IV.1#wshRun

    Voilà si tu as besoin d'autre précision, n'hesites pas, maintenant que je sais que l'on peut se comprendre

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Alors le /log est une faute de frappe, il faut lire .log

    J'ai fait une variable Wait_on_return=true en debut de ligne car je trouve que cela parle plus.
    Quote: (bWaitOnReturn : à True attends la fin de l'exécution du programme avant d'effectuer la suite.. ) car le programme met bien 15 min a tout copier dans le fichier. Donc je veux être sur que la copie qui doit suivre récupere le fichier complet


    Il faut donc que je crée mon fichier avant de lancer le Run? Je ne peux me servir du resultat?

    Voici ce que j'ai fait pour le moment: (Soyez indulgent c'est mon premier et les commentaires sont pour moi )

    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
     
    Option Explicit
     
    Dim Server
    Dim WshShell
    Dim Network
    Dim dateinfo
    Dim Timeinfo
    Dim Wait_On_Return
    Dim logfile
     
    'récuperation du nom de la machine
    Set Network = CreateObject("WScript.Network")
     
    Server=Network.ComputerName
     
     
    Wait_On_Return=True
     
    'Mise en place des dates, Right +100,2 afin d'avoir la date tjrs sur 2 chiffres
     
    dateinfo = DatePart("yyyy" , Now) & right(DatePart("M" , Now)+100,2) & DatePart("d" ,Now)
    Timeinfo = right(DatePart("h", Now)+100,2) & right(DatePart("n" , Now)+100,2)
     
     
    Set WshShell = CreateObject("WScript.Shell")
     
    'lancement du prg d'extraction des eventslogs
     
    WshShell.Run "cmd /c D:\Log\pstools\psloglist.exe -s -x security -e 566> D:\Log\" _
    				 & Server & "-" & dateinfo & Timeinfo & ".log",,Wait_On_Return

    Donc ce programme me crée un fichier toto-200809231540.log

    Je sais faire un 2 ème VBS de copie, mais j'aimerai pouvoir en faire qu'un seul, et rappeler le fichier crée avec les variable de temps.

    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
    Option Explicit
    Dim fichieracopier, SF, destination
    fichieracopier="D:/Log/ C'est la que je bloque"
    'Bien laisser le \ à la fin
    destination="\\Server\share\"
     
    'Mise en place de l'instance:
    
    Set SF=CreateObject("Scripting.FileSystemObject")
    
     
    'Action de copie en elle même:
     
    SF.CopyFile fichieracopier,destination
    ET ben merci beaucoup Ced600! Je t'ai relu une bonne 10aine de fois et j'ai pondu un petit :

    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
     
    Dim Fichieracopier
    Fichieracopier = "D:\Log\" & Server & "-" & dateinfo & Timeinfo & ".log"
     
     
    Dim SF, destination
    'Bien laisser le \ à la fin
    destination="D:\Log\Testcopie\"
     
    'Mise en place de l'instance:
     
    Set SF=CreateObject("Scripting.FileSystemObject")
     
     
    'Action de copie en elle même:
     
    SF.CopyFile curFile,destination
    QUi mis en fin de mon premier fichier règle mon problème.

    Merci du temps que tu as passé pour me répondre.

    Je sais ou poster mes futures problèmes existentiels

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bon je saute de joie mais en fait, j'aimerai juste que cette solution soit validée ^^

    J'ai un doute subitement.

    Est ce que le fichier appelé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichieracopier = "D:\Log\" & Server & "-" & dateinfo & Timeinfo & ".log"
    fait appel au fichier plus haut, ou est ce que vu qu'il est généré au même moment, il a le même nom, donc coup de chance ça match.

    Merci.

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je ne connais pas psloglist.exe, mais si tu lui donne en paramètre le nom du futur fichier log, il ne va pas en créer un autre je pense.

    Lorsque tu lance ton script, l'interpréteur VBS va remplacer les variables par leurs contenu lors d'une concaténation de chaine de caractère.

    Donc run ne lance pas cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "cmd /c D:\Log\pstools\psloglist.exe -s -x security -e 566> D:\Log\" _
    				 & Server & "-" & dateinfo & Timeinfo & ".log"
    Mais celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "cmd /c D:\Log\pstools\psloglist.exe -s -x security -e 566> D:\Log\toto-200809231540.log"
    Le nom du fichier ayant été généré à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "D:\Log\" _
    				 & Server & "-" & dateinfo & Timeinfo & ".log"
    Donc lorsque tu déplaces ceci dans une variable comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichieracopier = "D:\Log\" & Server & "-" & dateinfo & Timeinfo & ".log"
    L'interpréteur du script au moment où il lit cette ligne, il va construire la chaine de caractère final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "D:\Log\toto-200809231540.log"
    et donc Fichieracopier aura cette valeur.
    En effet Server a pour valeur la valeur de la propriété Network.ComputerName
    dateinfo et Timeinfo sont issu de concaténation de retour de fonction de date de traitement de chaine de caractère.

    Bref c'est dynamique au moment de l'appel des fonctions, mais lorsque tu stocke cela dans une variable, cela devient statique.

    Donc lorsque l'interpréteur arrive sur la commande run suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WshShell.run "cmd /c D:\......\prog.exe arguments > " & Fichieracopier,,true
    Il concatène la valeur de Fichieracopier au début de ta commande, et run lance la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "cmd /c D:\Log\pstools\psloglist.exe -s -x security -e 566> D:\Log\toto-200809231540.log"
    Donc ce que tu peux même faire, c'est utiliser Fichieracopier pour la commande run et le déplacement du fichier.

    J'espère que cela répond à ta question.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Parfaitement merci.

    Mon nouveau psaume du soir:

    "une variable ne varie pas!"

    J'y arriverai, et notamment grâce à ce site

    Merci encore.

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par Ome77 Voir le message
    Parfaitement merci.

    Mon nouveau psaume du soir:

    "une variable ne varie pas!"

    J'y arriverai, et notamment grâce à ce site

    Merci encore.
    Nop, on ne peux pas dire cela.

    Une variable ne varie pas entre une première affectation, et une seconde affectation.

    Une variable varie durant le programme car tu peux faire plusieurs affectation de valeurs à cette variable durant la vie du programme.

    L'exemple le plus simple est le compteur d'une boucle.
    A chaque tour de boucle tu l'incrémente. Si commence à zéro, au bout de 10 tours le compteur vaut 10, donc il a varié. Par contre pendant un tour de boucle précis il vaut une valeur très précise (par exemple 5) si l'on considère que son incrémentation est faite en début de boucle ou en fin de boucle.

    Par contre il existe des "variables" qui ne varie pas durant tout le programme, c'est ce que l'on appelle des constantes. On lui affecte une valeur une première fois, et elle n'en change jamais durant toute la vie du programme.

    Donc reformulant ton psaume :
    "Une variable varie durant la vie d'un programme, mais ne varie pas entre 2 affectations de valeurs. Maitrisant le programme que j'ai développé, je sais donc quand ma variable peut changer de valeur."


  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Héhé ok, je modifie mon psaume.

    J'ai hâte d'arriver à la dernière partie..."Je maitrise..."!

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/12/2012, 12h21
  2. demande d'aide : récupération de variables en GET
    Par Bibicoeur dans le forum ASP
    Réponses: 1
    Dernier message: 17/08/2005, 08h34
  3. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40
  4. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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