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 :

Intégrer une commande Batch dans un script VBS


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Intégrer une commande Batch dans un script VBS
    Bonjour,

    Actuellement, j'ai un script qui utilise un intermédiaire .bat pour donner un certain résultat. J'aimerais éviter d'utiliser des fichiers à droite et à gauche afin de tout avoir dans mon seul fichier vbs. J'exécute le vbs j'ai le résultat sans faire appel à des intermédiaires (mon fichier .bat). C'est pour cette raison que j'ai essayé d'intégrer cette commande .bat dans mon fichier vbs. Voici le contenu du fichier .bat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @ECHO OFF
    wmic /output:D:\Programmesliste.txt product get name ' Donne la liste des logiciels installés sur la machine locale
    type D:\Programmesliste.txt | find /v "Name" > D:\ProgrammesListe.csv ' Recherche dans D:\Programmesliste.txt "Name" afin d'omettre la ligne le contenant et de copier le fichier sans celui-ci sur D:\ProgrammesListe.csv
     
    type D:\Inventaire_logiciel.csv > D:\Inventaire_logiciel2.csv ' Copie le contenu de D:\Inventaire_logiciel.csv dans D:\Inventaire_logiciel2.csv
    type D:\Programmesliste.csv >> D:\Inventaire_logiciel2.csv ' Concatène D:\Programmesliste.csv directement à la suite dans D:\Inventaire_logiciel2.csv (sachant que le séparateur est le retour à la ligne)
    Ce fichier .bat fonctionne correctement, et me donne une liste plutôt exhaustive des logiciels que j'ai installé, mais une fois intégré dans le script .vbs j'ai quelques soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set objShell = CreateObject("Wscript.Shell")
    'construction cumulatif de ligne de commande
    strCommand = "@ECHO OFF" & vbcrlf  ' "vbcrlf" est un retour à la ligne
    strCommand = strCommand & "wmic /output:D:\Programmesliste.txt product get name" & vbcrlf 
    strCommand = strCommand & "type D:\Programmesliste.txt | find /v ""Name"" > D:\ProgrammesListe.csv" & vbcrlf 
    strCommand = strCommand & "type D:\Inventaire_logiciel.csv > D:\Inventaire_logiciel2.csv" & vbcrlf
    strCommand = strCommand & "type D:\Programmesliste.csv >> D:\Inventaire_logiciel2.csv"
    wscript.echo strCommand  ' <---temporairement (pour tester si la ligne de commande est correcte ou non)
    objShell.Run strCommand, 1, True  ' 1 pour afficher la console et 0 pour la cacher
    Au final, en terme de syntaxe, j'obtiens le même chose qu'avec le .bat, mais j'ai une erreur à la ligne 9 (soit à la ligne objShell) qui me spécifie que le fichier est introuvable... alors pourtant que ça marche quand j'exécute le fichier .bat, mais pas le .vbs.

    Si quelqu'un pouvait me dire ce qui cloche.

    Merci !

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Vous deviez tout d'abord créer le fichier batch , ensuite, l'exécuter
    La création de ce fichier batch se trouve dans le dossier temporaire :
    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
    Const ForWriting = 2
    Set objShell = CreateObject("Wscript.Shell")
    'construction cumulatif de ligne de commande
    strCommand = "@ECHO OFF" & vbcrlf  ' "vbcrlf" est un retour à la ligne
    strCommand = strCommand & "wmic /output:D:\Programmesliste.txt product get name" & vbcrlf 
    strCommand = strCommand & "type D:\Programmesliste.txt | find /v ""Name"" > D:\ProgrammesListe.csv" & vbcrlf 
    strCommand = strCommand & "type D:\Inventaire_logiciel.csv > D:\Inventaire_logiciel2.csv" & vbcrlf
    strCommand = strCommand & "type D:\Programmesliste.csv >> D:\Inventaire_logiciel2.csv"
    wscript.echo strCommand  ' <---temporairement (pour tester si la ligne de commande est correcte ou non)
    set fso = CreateObject("scripting.FileSystemObject")
    Tmp = fso.GetSpecialFolder(2) ' Dossier temporaire
    ScriptBasename = fso.GetFileName(Wscript.ScriptFullname) ' obtenir le nom de notre script
    BatchFile = Tmp & "\" & scriptbasename &".bat" ' le chemin absolu du fichier batch à créer
    Set stream = fso.OpenTextFile(BatchFile,2,True) ' on ouvre le fichier batch en écriture
    stream.WriteLine strCommand ' on écrit notre fameuse commande cumulative dans notre fichier batch
    objShell.Run BatchFile,1,True  ' 1 pour afficher la console et 0 pour la cacher

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    J'avoue ne pas comprendre ta réponse ^^

    Dans l'état actuel, mon script fait dèjà appel à un fichier .bat qui s'exécute, le script reprend ensuite son travail en exploitant les données générées et organisées par le batch.

    Seulement, je demande justement à ne pas créer de fichier intermédiaire (donc un éventuel fichier batch dans le dossier tmp ou autre part). Seul le script .vbs doit, en s'exécutant, donner le résultat sans faire appel à qui que ce soit comme fichier. J'aimerais dans l'idéal supprimer le fichier batch et trouver un moyen d'exécuter une invite de commande via mon script .vbs et y injecter la commande auparavant contenu dans mon .bat qui est dans mon .vbs mais que j'ai du mal à intégrer (d'où ma demande d'intégrer le code d'un .bat dans un .vbs).

    Je sais pas si j'ai été clair ? ^^'

  4. #4
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Dans ce cas il faut écrire la commande dans une seule ligne et l'exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set objShell = CreateObject("Wscript.Shell")
    'construction cumulatif de ligne de commande
    strCommand = "@echo off & Mode con cols=70 lines=5 & Color 0E & echo Veuillez patientez un peu ... Execution en cours ... "
    strCommand = strCommand & " & wmic /output:D:\Programmesliste.txt product get name"
    strCommand = strCommand & " & type D:\Programmesliste.txt | find /v ""Name"" > D:\ProgrammesListe.csv"
    strCommand = strCommand & " & type D:\Inventaire_logiciel.csv > D:\Inventaire_logiciel2.csv"
    strCommand = strCommand & " & type D:\Programmesliste.csv >> D:\Inventaire_logiciel2.csv"
    strCommand = strCommand & " & cls & color 0A & echo termine"
    wscript.echo "Cmd /k "& strCommand  ' <---temporairement (pour tester si la ligne de commande est correcte ou non
    objShell.Run "Cmd /k "& strCommand,1,True  ' 1 pour afficher la console et 0 pour la cacher

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    Salut !

    La modification que tu as apportée marche impeccablement bien ! Merci !

    Par contre, j'aimerais connaître certains aspects des ces ajouts, que tu me dises à quoi ils servent :

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @echo off & Mode con cols=70 lines=5 & Color 0E & echo Veuillez patientez un peu ... Execution en cours ...
    : "Mode con" définit un ensemble de propriété pour "personnaliser" l'invite de commande ?, "cols=70" et "line=5" définissent la dimension de l'invite de commande tandis que "Color 0E" sa couleur ? D'ailleurs comment se construit le code couleur, par exemple "00" correspond à quelle couleur ?

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCommand = strCommand & " & wmic /output:D:\Programmesliste.txt product get name"
    : Pourquoi mettre un second "&" ? Le premier vient, je pense, concaténer pour regrouper l'ensemble des commandes, le second, lui, sert d’équivalent à la saisie de deux commandes l'une après l'autre sur l'invite de commande. C'est une sorte de séparateur des commandes pour les exécuter l'une à la suite de l'autre ?

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCommand = strCommand & " & cls & color 0A & echo termine"
    : à quoi sert le "cls" ?

    Merci pour les éclaircissements.

  6. #6
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Tu as presque répondu a tous tes questions
    Pour connaître mieux la syntaxe d'une commande en général, tu ouvres un invite de commande et tu tapes pour chaque commande suivi /? pour afficher son help
    Exemple si tu veux savoir le help de la commande color tu tapes comme ceci :
    Color /?

    Et tu obtiens quelque chose comme ceci :

    Change les couleurs par défaut du premier et de

    l'arrière plan de la console.

    COLOR [attr]

    attr Spécifie les attributs de couleurs de

    l'apparence de la console

    Les attributs de couleurs sont spécifiés par DEUX

    chiffres hexadécimaux -- le
    premier correspond à l'arrière plan, le second au

    premier plan. Chaque chiffre
    peut prendre n'importe quelle de ces valeurs :

    0 = Noir 8 = Gris
    1 = Bleu foncé 9 = Bleu clair
    2 = Vert A = Vert clair
    3 = Bleu-gris B = Cyan
    4 = Marron C = Rouge
    5 = Pourpre D = Rose
    6 = Kaki E = Jaune
    7 = Gris clair F = Blanc

    Si aucun argument n'est donné, cette commande restaure

    les couleurs
    sélectionnées au moment où CMD.EXE a été ouvert. Cette

    valeur vient soit de la
    fenêtre de la console, du commutateur en ligne de

    commande /T, ou de la valeur
    DefaultColor du registre.

    La commande COLOR met ERRORLEVEL à 1 si vous tentez de

    l'exécuter
    avec la même couleur pour l'arrière et le premier plan.


    Exemple : "COLOR fc" affiche du rouge sur du blanc

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

Discussions similaires

  1. Execution d'une commande telnet dans un script sh
    Par Nospher dans le forum Linux
    Réponses: 17
    Dernier message: 23/08/2011, 15h30
  2. Lancer une commande Perl dans un script Shell
    Par Ryo_san dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/06/2008, 11h01
  3. lancer une commande linux dans un script perl
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 21/11/2007, 16h18
  4. [cURL] Lancer une commande curl dans un script php
    Par griese dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 22/03/2007, 10h52
  5. Réponses: 5
    Dernier message: 16/03/2007, 12h16

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