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

BODI Discussion :

[BODS 12.2] Lancement de .bat via script


Sujet :

BODI

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 13
    Points
    13
    Par défaut [BODS 12.2] Lancement de .bat via script
    Bonjour,

    J'ai un problème assez complexe d'appel de .bat depuis un script dans mon job BODS.
    Je vais essayer de vous expliquer mon raisonnement le plus simplement possible.

    Mon script s'exécute en tête de job, il doit convertir des .xlsx en .xls pour qu'ils soient utilisés dans le job.
    Ceux ci sont converti via une procédure de mon cru : un .bat appel un .vbs qui copie/rename.

    Code du .bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ECHO OFF
    c:\windows\system32\cscript.exe chemin1\xlsx2xls.vbs "chemin2\tur6B.xlsx" "chemin2\tur6B.xls"
    EXIT
    Code du .vbs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open(Wscript.Arguments(0), null, true, null, null, null,null,null,null,null,null,null,null,null,null)
    MsgBox("OK")
    objExcel.Application.Visible = False
    objExcel.Application.DisplayAlerts = False
    objExcel.ActiveWorkbook.SaveAs Wscript.Arguments(1), 56
    objExcel.ActiveWorkbook.Close
    objExcel.Application.DisplayAlerts = True
    objExcel.Application.Quit
    WScript.Quit
    Et voici le code du script BODI (Toto.bat contient un CALL vers le premier .bat, c'était un test mais ça marchait alors que l'appel direct au premier bat ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
     
    exec('cmd', 'chemin2\toto.bat', 8);
    sleep(10000);
    end
    Le problème maintenant : Quand je double clic sur toto.bat, tout se passe bien, la conversion, etc.
    Quand je lance depuis BODS, ca ne marche pas.

    Je tente un truc : Je change le contenu du premier .bat en mettant un ECHO vers fichier au lieu de l'appel au VBS. Le double clic marche (normal), mais l'exécution depuis BODI aussi !

    Ma question est donc de savoir si quelqu'un sait pourquoi dans un cas ca marche et dans l'autre non, y a-t-il une limite en profondeur de l'appel, est-ce un problème de passage de paramètres dans les cmd,...

    Je précise qu'il n'y a aucune erreur à l'exécution dans BODS, et le sleep je me suis dit que peut être qu'il n'avait pas le temps de convertir avant de faire la suite, mais ça change rien.

    Merci d'avance à tout ceux qui auront eu le courage de lire

    PS : sinon s'il y en a qui savent comment gérer les .xlsx avec cette version j'achète aussi ça sera vachement plus simple
    Guillaume

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    J'ai eu aussi pas mal de difficultés à gérer des scripts, mais c'était toujours dû
    - soit à des chemins qui n'était pas en absolu partout.
    - soit à des droits sur des répertoires réseau (selon l'utilisateur utilisé pour le service DS).
    - soit concernant les paramètres passés mal récupérés (exec avec paramètres) du genre un symbole ">" dans une chaine, interprété par le Dos.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Merci de ta réponse, mais là du coup le problème ne semble pas vraiment être sur les chemins, puisqu'en fonction de la fonction utilisé dans le .bat l'exécution marche ou pas, mais marche tout le temps quand l'exécution est fait manuellement (double clic sur .bat).

    Je me demande presque si ça ne viendrait pas du cmd.exe en appel récursif; c'est un peu le flou complet ^^'

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par dnyyy Voir le message
    le problème ne semble pas vraiment être sur les chemins, puisqu'en fonction de la fonction utilisé dans le .bat l'exécution marche ou pas, mais marche tout le temps quand l'exécution est fait manuellement (double clic sur .bat).
    '
    Typiquement un problème de path. déplace le premier .bat, et double-cliques. Puis le suivant. Si c'est un problème de path relatif ça apparaitra.
    Ca peut aussi être un problème de variable d'environnement.

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2004
    Messages : 131
    Points : 187
    Points
    187
    Par défaut
    Salut,
    Effectivement, il s'agit à mon avis d'un problème de chemin.
    Au lieu de:
    exec('cmd', 'chemin2\toto.bat', 8);
    Essaye:
    exec('cmd', 'chemin2\\toto.bat', 8);
    En remplaçant les "\" par des "\\" dans le reste du chemin.

    ++

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Quand je déplace ça ne marche plus, et quand je les remets ça marche (ce sont des liens en dur).
    Pour la variable d'environnement je ne sais pas trop ce qui pourrait jouer.
    J'ai testé de lancer directement le vbscript avec paramètres comme depuis la console plutôt que le .bat, mais j'ai le même résultat : mon job se bloque au niveau du script et rien ne se passe.

    Merci de votre aide mais je pense que je vais devoir passer à une autre méthode "moins propre" pour faire ça

    Edit : Le \\ je l'ai tenté, il l'interprète de la même manière que le \

    En fait je pense que le .bat se lance bel et bien, voici une des lignes affichées avec le print :
    9644 8840 PRINTFN 05/08/2013 10:34:48 fichier ®ÿC:\Users\212304920\Documents\PersoTG\fichiers_TG\test1.xlsxÿ¯. Plusieurs raisons sont possiblesÿ: Le nom du....

    par contre avec un .xls il me dit juste fichier introuvable. Peut être une histoire d'extension.

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2004
    Messages : 131
    Points : 187
    Points
    187
    Par défaut
    Encore une idée pour résoudre ton problème.

    Au lieu d'utiliser:
    exec('cmd', 'c:\\chemin2\\toto.bat', 8);
    Utiliser:
    exec('wscript','c:\\chemin2\\ton_script.vbs' ,0);
    sinon tester avec
    exec('cscript','c:\\chemin2\\ton_script.vbs' ,0);

    Essaye avec un emplacement local avant d'utiliser un emplacement réseau pour ton script.

    Si c'est ok pour le local, ça voudra dire que tu peux avoir des problématiques de droits d'accès à ton script par l'utilisateur utilisé pour lancer les services DI.

    ++

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    J'avais testé en lançant directement le script mais pas de cette manière.

    wscript ne donne rien, mais cscript se lance.
    Le problème c'est que mon vbscript prend 2 arguments. Si je mets juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(exec('cscript','C:\\...\\xlsx2xls.vbs' ,8));
    Alors j'ai :
    7028 9584 PRINTFN 05/08/2013 13:32:50 r‚serv‚s. C:\...\xlsx2xls.vbs(2, 1) Erreur d'ex‚cution Microsoft VBScript:
    7028 9584 PRINTFN 05/08/2013 13:32:50 Indice en dehors de la plage
    Et si je mets 2 paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(exec('cscript','C:\\...\\xlsx2xls.vbs C:\\...\\test1.xlsx C:\\...\\test2.xls' ,8));
    5876 3708 PRINTFN 05/08/2013 13:34:26 r‚serv‚s. C:\Users\212304920\Documents\PersoTG\fichiers_TG\xlsx2xls.vbs(2, 1) Microsoft Excel: Microsoft Excel ne peut
    5876 3708 PRINTFN 05/08/2013 13:34:26 acc‚der au fichier ®ÿC:\...\test1.xlsxÿ¯. Plusieurs raisons sont possiblesÿ:......
    Du coup ca pourrait marcher (ca semble plus simple de prendre le script directement plutôt qu'un .bat) mais j'ai l'impression qu'il interprète toujours bizarrement les bout de string (cf caractères bizarres ®ÿ ... ÿ¯). J'ai testé en mettant avec " " et ' ' ||' ' également.

  9. #9
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2004
    Messages : 131
    Points : 187
    Points
    187
    Par défaut
    et en faisant?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(exec('cscript','C:\\...\\xlsx2xls.vbs \"C:\\...\\test1.xlsx C:\\...\\test2.xls\"' ,8));

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    J'ai testé plusieurs manières et aucune ne marche :
    8052 3604 PRINTFN 05/08/2013 15:35:22 '\C:\...\test1.xls C:\...\test2.xls\.xlsx'
    Il concatène les 2 et conserve les \ dans la chaîne. On voit qu'il rajoute aussi .xlsx à la fin c'est bizarre.
    J'ai testé en échappant chaque " et type : xlsx2xls.vbs \"test1.xls\" \"test2.xls\" mais ca ne donne rien non plus :/

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Nouvelle information qui semble important :

    Quand je lance le vbs sans paramètres en mettant en dur dans mon .vbs le chemin des fichiers, j'ai exactement la même erreur dans BODS.

    L'erreur doit donc être dans mon script et non dans la formulation BODS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set objExcel = CreateObject("Excel.Application")
    Dim fic1
    fic1 = "C:\...\test1.xls"
    Set objWorkbook = objExcel.Workbooks.Open(fic1, null, null, null, null, null,null,null,null,null,null,null,null,null,null)
    objExcel.Application.Visible = False
    objExcel.Application.DisplayAlerts = False
    objExcel.ActiveWorkbook.SaveAs "C:\...\test2.xls", 56
    objExcel.ActiveWorkbook.Close
    objExcel.Application.DisplayAlerts = True
    objExcel.Application.Quit
    WScript.Quit
    J'ai testé avec la chaîne directement, et avec la variable.
    Du coup je pense que le problème n'a plus à voir avec BODS, merci de votre aide, et si vous savez pour le VBS je suis toujours tout ouïes

  12. #12
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2004
    Messages : 131
    Points : 187
    Points
    187
    Par défaut
    le VBS et moi ça fait deux. La seule chose qui me vienne à l'esprit ce serai de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET objWorkbook = objExcel.Workbooks.Open(fic1)
    A la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET objWorkbook = objExcel.Workbooks.Open(fic1, NULL, NULL, NULL, NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)

    ++

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

Discussions similaires

  1. Lancement d'un bat invisible via script VBS
    Par coolpix77 dans le forum Général Python
    Réponses: 11
    Dernier message: 06/09/2014, 15h15
  2. Lancement d'un job Talend via script
    Par bstevy dans le forum Exécution et industrialisation
    Réponses: 7
    Dernier message: 26/11/2009, 15h22
  3. lancement de batch via TSE
    Par Jean-Matt dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 08/08/2005, 15h17
  4. Events "OnAuthenticate, ..." accessible via script
    Par mchicoix dans le forum XMLRAD
    Réponses: 10
    Dernier message: 09/02/2005, 16h50
  5. [Process]Lancement d'applictions via bath sous Dos.
    Par juflata dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 22/06/2004, 14h03

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