Batch résultat d'une commande -> variable

Fermé
Remad - 20 déc. 2009 à 21:01
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 12 janv. 2010 à 07:33
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?
A voir également:

16 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 déc. 2009 à 08:50
hello
@echo off
for /f %%a in ('D:\Monprogramme.exe') do "D:\Monprogramme2.exe" %%a
1
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
22 déc. 2009 à 07:41
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
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 déc. 2009 à 15:23
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
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 déc. 2009 à 17:07
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
22 déc. 2009 à 09:53
c'est peut-être à cause des () dans set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
renomme le dossier sans ()
0
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
23 déc. 2009 à 08:12
enlève le echo off et regarde chaque commande qui s'affiche à l'exécution
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
23 déc. 2009 à 09:55
vérifier que la boucle retourne quelque chose

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

http://bnwarriors.free.fr/images/cmd.jpg
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
29 déc. 2009 à 07:23
"%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
Non le lecteur virtuel est bien crée à chaque fois...
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
29 déc. 2009 à 13:03
le for s'en fiche, qu'affiche la commande ?
0
laquelle?

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