Edit: Romulo A. Ceccon a posté a much better solution qui ne comporte aucun accès au système de fichiers et de sales tours. Laissé ceci ici pour référence (cela fonctionne aussi avec command.com si vous avez besoin de la compatibilité 9x), mais veuillez préférer la solution de Romulo. Parcourez une variable d'environnement que vous définissez à l'aide d'un script d'aide intermédiaire que vous générez dynamiquement à partir d'un gabarit. Vous aurez besoin d'autorisations d'écriture quelque part, sinon il ne peut pas être fait (la langue de l'interpréteur de commandes de Windows est très, très limité.)
Appelons votre modèle de script d'aide helper.tpl
avec le contenu suivant:
set INTERMEDVAR=
Se assurer que helper.tpl
n'a qu'une seule ligne (pas CRLF de fin!) et assurez-vous que vous n'avez pas d'espaces après le signe égal à cet endroit.
Maintenant, dans votre script principal, capturer la sortie de votre commande dans un fichier temporaire (appelons-le my_output_file.tmp
):
cmd /k ""executable" "param1" "param2"" > my_output_file.tmp
Ensuite, copiez le contenu du modèle d'aide et la production, ainsi que dans votre aide scénario, nous allons l'appeler my_helper_script.cmd
:
copy /b helper.tpl + my_output_file.tmp my_helper_script.cmd
Ensuite, le script évaluer d'aide dans le contexte actuel:
call my_helper_script.cmd
Maintenant, la variable INTERMEDVAR est définie sur la première ligne de la sortie de « exécutable » (si elle émet plus d'une ligne, vous êtes sur votre propre ...) Vous pouvez maintenant invoquer IE:
start iexplore.exe "%INTERMEDVAR%"
et ne pas oublier de nettoyer les fichiers créés:
del /q /f my_output_file.tmp my_helper_script.cmd
Cela fonctionne évidemment pas lorsqu'il est appelé plusieurs fois en parallèle - vous devrez paramétrer les noms de fichiers temporaires et script d'aide en utilisant le cmd en cours PID .exe (par exemple) afin qu'ils ne vont pas écraser la sortie de l'autre, mais le principe est le même.
Cependant, si vous pouvez obtenir un vrai shell, utilisez-le. cmd.exe est extrêmement lourd.
Notez que vous devez utiliser/C (et non/K) car vous souhaitez que le shell se termine et renvoie la chaîne. –