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

Scripts/Batch Discussion :

Fichier de commande ne fonctionne pas sous cmd [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Profil pro
    Retraité
    Inscrit en
    Octobre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2003
    Messages : 14
    Par défaut Fichier de commande ne fonctionne pas sous cmd
    Bonjour à tous,


    Je m'explique, j'ai un fichier de commande dont l'objectif est de tester mon débit de connexion ADSL (code ci-dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cd E:\
    cd To_Save\BF\wget\
    .\wget -o wg.txt http://test-debit.free.fr/2048.rnd 
    .\grep KB/s wg.txt | gawk "{print $1, $2, $3, $4}" | sed "s/[(|)]//g" >> res.txt
    rem On recupere l'erreur si elle existe
    .\grep  -B 2 wget: wg.txt >> res.txt
    Si j'ouvre une fenêtre de commande et que je lance le fichier qui contient ces lignes (bfwget.bat), tout fonctionne parfaitement.
    Le début du fichier résultat (wg.txt) se trouve ci-dessous :
    --2014-05-26 15:03:21-- http://test-debit.free.fr/2048.rnd
    Resolving test-debit.free.fr... 212.27.42.153
    Connecting to test-debit.free.fr|212.27.42.153|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    ...
    Maintenant l'objectif est de faire tourner le script par le planificateur de tâche qui, je suppose, le lance par l'intermédiaire d'une fenêtre de commande non interactive (on voit une fenêtre qui s'affiche fugitivement). Et là, ce n'est plus bon.

    Si je lance bfwget.bat par l'intermédiaire d'un fenêtre de commande non interactive (cmd /C bfwget.bat), le script ne fonctionne plus et le fichier de résultat est :
    --2014-05-26 15:10:32-- http://test-debit.free.fr/2048.rnd
    Resolving test-debit.free.fr... failed: Host not found.
    : unable to resolve host address `test-debit.free.fr'
    En d'autres termes, wget n'est plus capable de résoudre l'adresse http://test-debit.free.fr, alors qu'il sait le faire si on ne passe pas par l'intermédiaire de CMD /C.

    J'ai essayé une demi douzaine d'options de commande de wget qui ont un rapport avec le dns ou un quelconque time-out sans succès.

    J'ajoute que ce fichier fonctionnait correctement, y compris par l'intermédiaire du planificateur de tâche. Puis un jour, il a cessé de fonctionner.
    Mise à jour Windows, installation de logiciel, je ne saurai le dire.

    Je ne sais pas trop comment aller plus loin, c'est comme si les variables d'environnement étaient perdues quand on lance la seconde console de commande.
    Sous linux, il existe un moyen de lancer une commande dans le même contexte d'environnement que la console maitre.
    Est-ce que cela existe sous Windows ?

    Sinon quelqu'un a-t-il une idée pour débloquer le problème.

    Merci de vos éventuelles réponse et longue vie à tous


    SE Windows 7

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 075
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 075
    Par défaut
    Salut,
    Citation Envoyé par fausto Voir le message
    (...) J'ajoute que ce fichier fonctionnait correctement, y compris par l'intermédiaire du planificateur de tâche. Puis un jour, il a cessé de fonctionner.(...)
    Es-tu sûr de ça ?

    Parce que ta première ligne du script me laisse perplexe : cd E:\ ne veut rien dire et ne peut pas fonctionner...
    Car "cd" ça veut dire "change directory", en français "changer de dossier". D'ailleurs tu l'utilises correctement sur la 2e ligne.
    La première devrait être E: tout court, pour demander à passer sur le disque E:.

    Citation Envoyé par fausto Voir le message
    (...) En d'autres termes, wget n'est plus capable de résoudre l'adresse http://test-debit.free.fr, alors qu'il sait le faire si on ne passe pas par l'intermédiaire de CMD /C.
    Et moi je pense qu'il ne trouve pas ton fichier .txt suite à ce que j'ai expliqué ci-dessus.

    Lancé en ligne de commande le script fonctionne, mais on ne sait pas comment il est lancé.
    Lancé en tâche planifiée, il fonctionne depuis le disque C: si la commande de la 1re ligne échoue, normal qu'il ne trouve pas le fichier .txt...

    Teste et dis-nous...

  3. #3
    Membre averti
    Profil pro
    Retraité
    Inscrit en
    Octobre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2003
    Messages : 14
    Par défaut
    Merci de ta réponse, tu as raison pour le CD E:, mais le problème ne vient pas de là ; j'ai essayé en supprimant le "CD" avec le même résultat
    Citation Envoyé par Jipété Voir le message
    Salut,

    Es-tu sûr de ça ?

    Parce que ta première ligne du script me laisse perplexe : cd E:\ ne veut rien dire et ne peut pas fonctionner...
    Car "cd" ça veut dire "change directory", en français "changer de dossier". D'ailleurs tu l'utilises correctement sur la 2e ligne.
    La première devrait être E: tout court, pour demander à passer sur le disque E:.
    J'ai installé ma version Windows 7 le 06/01/2014 et j'ai un fichier résultat (res.txt, que je tiens à ta disposition) de 1237 lignes. Donc oui, le script a fonctionné jusqu'au 04/04/2014.

    Lancé en ligne de commande le script fonctionne, mais on ne sait pas comment il est lancé.
    J'ouvre une fenêtre de commande, je tape E: (entrée), puis CD To_Save\BF\wget\ (entrée) et enfin je tape bfwget.bat (entrée) pour que le batch s'exécute. Là, c'est OK.
    Si dans la même fenêtre de commande je tape CMD /c .\bfwget.bat (entrée), là c'est KO.
    Même résultat d'ailleurs si je double clique sur le fichier bfwget.bat avec le gestionnaire de fichier de Windows.

    Lancé en tâche planifiée, il fonctionne depuis le disque C: si la commande de la 1re ligne échoue, normal qu'il ne trouve pas le fichier .txt...
    Je pense que si le batch fonctionne par double clic ou CMD /C, le problème de la tâche planifié sera résolu.

    Bon, pour moi c'est pas vital que ce script fonctionne, mais j'aime bien comprendre et là ...

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 075
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 075
    Par défaut
    Salut,

    Je pense que tu ne m'as pas compris (ou je me suis mal exprimé, ou tu connais mal les .bat).

    On reprend :
    Citation Envoyé par fausto Voir le message
    J'ouvre une fenêtre de commande, je tape E: (entrée),
    et donc tu te positionnes sur le lecteur E:

    Citation Envoyé par fausto Voir le message
    puis CD To_Save\BF\wget\ (entrée)
    et tu "descends" dans le dossier To_Save\BF\wget\

    Citation Envoyé par fausto Voir le message
    et enfin je tape bfwget.bat (entrée) pour que le batch s'exécute. Là, c'est OK.
    Le .bat est présent --> il s'exécute.

    Citation Envoyé par fausto Voir le message
    Si dans la même fenêtre de commande je tape CMD /c .\bfwget.bat (entrée), là c'est KO.
    La première commande "cd E:\" échoue, donc tu ne passes pas sur E:
    donc pas de "descente" dans le dossier To_Save...
    donc fichier .bat introuvable donc non exécuté et paf !

    ---

    Citation Envoyé par fausto Voir le message
    j'ai essayé en supprimant le "CD" avec le même résultat
    et donc la première ligne est devenue "E:\" ? Parce que c'est pas bon non plus : mélange de lecteur (E:) et de dossier (\).

  5. #5
    Membre averti
    Profil pro
    Retraité
    Inscrit en
    Octobre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2003
    Messages : 14
    Par défaut
    Bonjour Jipété,

    Merci de passer du temps à me répondre. Je constate que tu travailles tard mais j' ai effectivement l'impression qu'on tourne en rond. Je vais essayer de te convaincre que le batch s'exécute. J'ai modifié le code comme ci-dessous :
    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
    cd /D e:\To_Save\BF\wget\
    del /Q /F *.rnd*
    
    @ECHO OFF
    SET time_d=%time%
    REM ###########
    .\wget -o wg.txt http://test-debit.free.fr/2048.rnd
    .\grep KB/s wg.txt | gawk "{print $1, $2, $3, $4}" | sed "s/[(|)]//g" >> res.txt
    rem On recupere l'erreur si elle existe
    .\grep  -B 2 wget: wg.txt >> res.txt
    REM ###########
    SET time_e=%time%
    SET hour_d=%time_d:~0,2%
    SET min_d=%time_d:~3,2%
    SET sec_d=%time_d:~6,2%
    SET hour_e=%time_e:~0,2%
    SET min_e=%time_e:~3,2%
    SET sec_e=%time_e:~6,2%
    SET /a total_d=(%hour_d%*3600)+(%min_d%*60)+%sec_d%
    SET /a total_e=(%hour_e%*3600)+(%min_e%*60)+%sec_e%
    SET /a time_run=%total_e%-%total_d%
    ECHO.
    ECHO heure de debut de l'execution: %time_d%
    ECHO heure de fin de l'execution: %time_e%
    ECHO temps d'execution: %time_run% s
    
    echo Bonjour Jipete >> bonjour.txt
    
    PAUSE>nul
    Tu remarqueras le "témoin" en fin de fichier (echo Bonjour Jipete >> bonjour.txt).

    Ci-dessous le contenu de la fenêtre de commande après un appel direct :

    E:\To_Save\BF\wget>bfwget.bat

    E:\To_Save\BF\wget>cd /D e:\To_Save\BF\wget\

    E:\To_Save\BF\wget>del /Q /F *.rnd*
    SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
    syswgetrc = c:/progra~1/wget/etc/wgetrc

    heure de debut de l'execution: 9:29:36,91
    heure de fin de l'execution: 9:29:52,52
    temps d'execution: 16 s

    E:\To_Save\BF\wget>
    Puis après un appel via CMD /C :

    E:\To_Save\BF\wget>cmd /C bfwget.bat

    E:\To_Save\BF\wget>cd /D e:\To_Save\BF\wget\

    E:\To_Save\BF\wget>del /Q /F *.rnd*
    SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
    syswgetrc = c:/progra~1/wget/etc/wgetrc

    heure de debut de l'execution: 9:31:28,12
    heure de fin de l'execution: 9:31:28,33
    temps d'execution: 0 s
    Enfin, le contenu du fichier bonjour.txt (qui n'existait pas avant le premier appel) :
    Bonjour Jipete
    Bonjour Jipete
    Pour moi, le batch s'est bien exécuté 2 fois (cf les 2 lignes de bonjour.txt), une première fois en 16s (transfert OK), une seconde fois en moins d'1s.

    Pour faire avancer le schmilblic et ajouter à ma confusion, si j'exécute "à la main" la ligne qui semble poser problème, directement ou via CMD /C, cela fonctionne dans les deux cas (code ci-dessous).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .\wget -o wg.txt http://test-debit.free.fr/2048.rnd
    
    cmd /c ".\wget -o wg.txt http://test-debit.free.fr/2048.rnd"
    Merci encore de passer du temps sur ce problème, mais ça m'excite cette histoire.

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 075
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 075
    Par défaut
    Yop !

    Avec ton cd /d ça devrait le faire (je ne connaissais pas ce switch).

    Le seul truc que je vois (et que je tenterais si j'avais wget dans une machine Windows), c'est de remplacer cmd /c par cmd /k .

    Parce que l'aide est très claire là-dessus, et ce sont tes résultats avec les timings qui m'ont donné cette idée :
    /C Exécute la commande donnée par la chaîne de caractères puis se termine
    /K Exécute la commande donnée par la chaîne de caractères puis reste actif
    À tenter, et si ça foire encore, ben j'ai plus d'idées...

  7. #7
    Membre averti
    Profil pro
    Retraité
    Inscrit en
    Octobre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2003
    Messages : 14
    Par défaut
    Le seul truc que je vois (et que je tenterais si j'avais wget dans une machine Windows), c'est de remplacer cmd /c par cmd /k .

    Parce que l'aide est très claire là-dessus, et ce sont tes résultats avec les timings qui m'ont donné cette idée :

    À tenter, et si ça foire encore, ben j'ai plus d'idées...
    J'avais déjà essayé, bien sur, mais c'est pareil.
    Bon ça va être l'occasion de me pencher sur Powershell

  8. #8
    Membre averti
    Profil pro
    Retraité
    Inscrit en
    Octobre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2003
    Messages : 14
    Par défaut
    Bonjour,

    Pour ceux que cela intéresse, j'ai finalement réussi à faire fonctionner ce satané script.
    Le simple fait de renommer le script de bfwget.bat en bfwg.bat a suffit pour le faire fonctionner avec CMD /C. Malheureusement, je ne sais pas pourquoi. Une confusion entre le nom de l'exécutable qui posait problème (wget.exe) et le nom du fichier (bfwget.bat) ?

    Quoiqu'il en soit, ça tourne, y compris avec le planificateur de tâches.

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

Discussions similaires

  1. Commande cmd ou invite de commande ne fonctionne pas
    Par olosimam dans le forum Windows XP
    Réponses: 1
    Dernier message: 21/01/2009, 21h03
  2. Fichier .js ne fonctionnant pas sous ie6
    Par Kikkoman dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 06/01/2009, 15h38
  3. Réponses: 18
    Dernier message: 19/08/2004, 15h11
  4. Java ne fonctionne pas sous Firefox
    Par Info-Rital dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 29/07/2004, 23h37
  5. Réponses: 6
    Dernier message: 27/01/2004, 11h14

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