Batch résultat d'une commande -> variable [Fermé]

Signaler
-
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
-
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?

16 réponses

Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
hello
@echo off
for /f %%a in ('D:\Monprogramme.exe') do "D:\Monprogramme2.exe" %%a
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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?
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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!
)
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
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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
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...
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
c'est peut-être à cause des () dans set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
renomme le dossier sans ()
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)" ...
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
enlève le echo off et regarde chaque commande qui s'affiche à l'exécution
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
vérifier que la boucle retourne quelque chose

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

http://bnwarriors.free.fr/images/cmd.jpg
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
"%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
Non le lecteur virtuel est bien crée à chaque fois...
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
le for s'en fiche, qu'affiche la commande ?
laquelle?

Un doute me prends, est-ce la même commande avec windows 7?
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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
http://bnwarriors.free.fr/images/cmd0.jpg
Aucune réponse, juste le lecteur virtuel de crée...
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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 ?
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"
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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%
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
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
ne faut-il pas exécuter le -mount avant le -add ?
Non il faut créer un nouveau lecteur virtuel (-add) avant de monter une image dessus (-mount), mais j'essayerais quand même...
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
-1 est une erreur, donc 0 est une valeur possible, que fait le reste de ton script avec 0 ?
@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:\)
> remad
Tout cela parce que %errorlevel% reste à 0, donc cible le premier disque virtuel crée soit Z:\.
Je sais pas si je suis clair...
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 303
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