Batch résultat d'une commande -> variable

Remad -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,
J'ai un programme qui renvoie une valeur lorsque qu'il est terminé. J'aimerais bien l'utiliser par la suite mais je n'y arrive pas :

@echo off
set /a drive="D:\Monprogramme.exe"
"D:\Monprogramme2.exe" %drive%
exit

sa ne fonctionne pas. Que faire?
Configuration: Windows 7
Firefox 3.5.6

16 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    @echo off
    for /f %%a in ('D:\Monprogramme.exe') do "D:\Monprogramme2.exe" %%a
    1
    1. remad
       
      Merci mais comment je peux utiliser le résultat encore après? Je m'explique :


      J'essaye de créer un nouveau lecteur virtuel et monter un fichier dessus et après de le démonter et supprimer le lecteur virtuel :

      @echo off
      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -add
      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -mount 0,"D:\OS\Ubuntu9.10.iso"
      pause
      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -unmount 0
      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -remove

      Mais j'aimerais bien le passer en moins "dur". Je sais que la commande

      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -add

      renvoie le numéro du lecteur crée (ici 0 en "dur") et j'aimerais bien pouvoir utiliser cette possibilité pour pouvoir lancer l'image sur un autre lecteur que le lecteur 0. Donc mémoriser la valeur de retour de

      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -add

      dans une variable nommé "drive" pour la réutiliser dans les lignes suivantes :

      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -mount %drive%,"D:\OS\Ubuntu9.10.iso"
      "D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe" -unmount %drive%


      Est-ce que ta solution enregistre le retour dans une variable?
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    la variable !drive! est correcte ?
    tu mets
    echo on
    avant
    echo Ajout du disque virtuel !drive!
    pour qu'il affiche ce qu'il fait
    1
    1. remad
       
      C'est même pas sa le problème, c'est que je voit même pas le
      echo Ajout du disque virtuel !drive!
      il passe à la pause après avoir monté le lecteur, comme si il faisait rien (ou juste la première commande) de ce qu'il y a dans les parenthèses...


      @echo off
      setlocal enableDelayedExpansion

      set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
      echo daemon : %daemon%

      set ubuntu=D:\OS\Ubuntu9.10.iso
      echo ubuntu : %ubuntu%


      for /f %%a in ('"%daemon%" -add') do (

      set /a drive="%%a"
      "%daemon%" -mount !drive!,"%ubuntu%"

      echo Ajout du disque virtuel !drive!..............................................[DONE]
      echo Montage de l'image CD dans le disque !drive!.................................[DONE]
      pause
      "%daemon%" -unmount !drive!
      echo Demontage de l'image CD................................................[DONE]
      "%daemon%" -remove
      echo Suppression du disque virtuel !drive!.......................................[DONE]
      )


      pause
      exit
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    la variable %%a contient le résultat de la commande.
    ou tu peux faire

    @echo off
    setlocal enableDelayedExpansion
    for /f %%a in ('D:\Monprogramme.exe') do (
    set drive=%%a
    "D:\Monprogramme2.exe" !drive!
    )
    0
    1. remad
       
      J'arrive à rien, mon programme ressemble à sa maintenant :

      @echo off
      setlocal enableDelayedExpansion

      set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
      echo daemon : %daemon%

      set ubuntu=D:\OS\Ubuntu9.10.iso
      echo ubuntu : %ubuntu%

      for /f %%a in ('"%daemon%" -add') do ('set /a drive="%%a"')
      echo Ajout du disque virtuel !drive!
      "%daemon%" -mount !drive!,"%ubuntu%"
      echo Montage de l'image CD dans le disque !drive!
      pause
      "%daemon%" -unmount !drive!
      echo Demontage de l'image CD
      "%daemon%" -remove
      echo Suppression du disque virtuel !drive!

      pause
      exit

      sa ne fonctionne pas, que je mettre "!drive!", "%drive%" ou %%a
      0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    il faut que les commandes soient à l'intérieur des () et pas de ' avec le set

    for /f %%a in ('"%daemon%" -add') do (set /a drive="%%a"
    echo Ajout du disque virtuel !drive!
    ...
    echo Suppression du disque virtuel !drive!
    )

    pause
    exit
    0
    1. remad
       
      J'ai l'impression qu'il sort des parenthèses après avoir créer le nouveau lecteur virtuel... Ya pas l'image d'Ubuntu de monté, juste les 2 echo du début puis le pause...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    c'est peut-être à cause des () dans set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
    renomme le dossier sans ()
    0
    1. remad
       
      Normalement avec les parenthèses sa devrait ne pas poser de problèmes vu que c'est entre gillemets "%daemon%". C'est surtout que mes OS sont en 64 bits, donc sa installe dans "Program Files (x86)" ...
      0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    enlève le echo off et regarde chaque commande qui s'affiche à l'exécution
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    vérifier que la boucle retourne quelque chose

    for /f %%a in ('"%daemon%" -add') do (
    echo +++++%%a++++++
    0
    1. remad
       
      Voila le résultat :

      http://bnwarriors.free.fr/images/cmd.jpg
      0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    "%daemon%" -add' ne s'exécute pas ou ne produit aucun résultat, ou plusieurs ? auquel cas ce n'est pas %%a qu'il faut afficher. Affiche l'exécution de

    set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
    "%daemon%" -add
    0
    1. remad
       
      Non le lecteur virtuel est bien crée à chaque fois...
      0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    le for s'en fiche, qu'affiche la commande ?
    0
    1. remad
       
      laquelle?

      Un doute me prends, est-ce la même commande avec windows 7?
      0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    celle là
    set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
    "%daemon%" -add
    si elle affiche plusieurs mots comme réponse, %%a du for ne va prendre que le premier
    0
    1. remad
       
      http://bnwarriors.free.fr/images/cmd0.jpg
      Aucune réponse, juste le lecteur virtuel de crée...
      0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    donc si il n'y a aucune réponse la boucle for sort immédiatement, normal.
    au post #1 J'ai un programme qui renvoie une valeur lorsque qu'il est terminé.
    de quoi parles-tu ?
    0
    1. remad
       
      C'est dans la documentation de daemon tools

      http://www.daemon-help.com/windows_integration_lite/command_line_parameters.html

      "-add - increments number of devices, returns number of virtual devices or -1 if error"
      0
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    il est dans errorlevel, fais:

    set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
    "%daemon%" -add
    echo %errorlevel%

    si c'est ça, dans ton script enléve la ligne avec for et met
    "%daemon%" -add
    set drive=%errorlevel%
    0
    1. remad
       
      http://bnwarriors.free.fr/images/cmd1.jpg

      J'ai toujours 0 comme valeur de retour...

      set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
      "%daemon%" -add
      echo %errorlevel%
      "%daemon%" -add
      echo %errorlevel%
      "%daemon%" -add
      echo %errorlevel%
      pause
      0
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ne faut-il pas exécuter le -mount avant le -add ?
    0
    1. remad
       
      Non il faut créer un nouveau lecteur virtuel (-add) avant de monter une image dessus (-mount), mais j'essayerais quand même...
      0
  15. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    -1 est une erreur, donc 0 est une valeur possible, que fait le reste de ton script avec 0 ?
    0
    1. remad
       
      @echo off
      setlocal enableDelayedExpansion

      set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
      echo daemon : %daemon%

      set ubuntu=D:\OS\Ubuntu9.10.iso
      echo ubuntu : %ubuntu%

      "%daemon%" -add
      set /a mount="%errorlevel%"
      echo Ajout du disque virtuel
      "%daemon%" -mount %mount%,"%ubuntu%"
      echo Montage de l'image CD dans le disque
      pause
      "%daemon%" -unmount %mount%
      echo Demontage de l'image CD
      "%daemon%" -remove
      echo Suppression du disque virtuel

      pause
      exit

      Le script fonctionne, seulement si aucun autre disque virtuel existe.
      Si je crée un disque virtuel (Z:\) avant et que je lance le script, il va lui aussi créer un disque virtuel (Y:\) mais monter l'image disque dans le premier disque virtuel crée (Z:\) et donc démonter l'image disque qui était déjà monté dans Z:\. Et à la fin du script, il va supprimer le disque virtuel qu'il à crée (Y:\)
      0
      1. remad > remad
         
        Tout cela parce que %errorlevel% reste à 0, donc cible le premier disque virtuel crée soit Z:\.
        0
  16. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    je n'ai pas vraiment saisi ce que fait ce programme, mais si il n'affiche aucun résultat et que %errorlevel% reste à 0, je ne vois pas très bien comment avoir un résultat dans une variable
    0