Batch résultat d'une commande -> variable
Remad
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
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?
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
-
hello
@echo off
for /f %%a in ('D:\Monprogramme.exe') do "D:\Monprogramme2.exe" %%a-
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?
-
-
la variable !drive! est correcte ?
tu mets
echo on
avant
echo Ajout du disque virtuel !drive!
pour qu'il affiche ce qu'il fait-
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
-
-
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
-
-
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
c'est peut-être à cause des () dans set daemon=D:\Program Files (x86)\DAEMON Tools Lite\DTLite.exe
renomme le dossier sans () -
enlève le echo off et regarde chaque commande qui s'affiche à l'exécution
-
vérifier que la boucle retourne quelque chose
for /f %%a in ('"%daemon%" -add') do (
echo +++++%%a++++++ -
"%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 -
le for s'en fiche, qu'affiche la commande ?
-
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 -
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 ? -
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% -
ne faut-il pas exécuter le -mount avant le -add ?
-
-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:\)
-
-
-
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