2009-04-20 9 views
1

Je cours un fichier exécutable dans un fichier batch avec deux paramètres;Définition d'une variable à partir d'un exécutable

cmd /k ""executable" "param1" "param2""

Cela renvoie une chaîne que je veux lancer. Je ne peux pas comprendre comment définir ce retour dans une variable et ensuite le lancer dans IE.

Des idées?

+0

Notez que vous devez utiliser/C (et non/K) car vous souhaitez que le shell se termine et renvoie la chaîne. –

Répondre

1

Vous pouvez utiliser la syntaxe suivante pour capturer la sortie de votre exécutable dans une variable:

FOR /F "tokens=*" %%i in ('%~dp0YOUR_APP.exe') do SET TOOLOUTPUT=%%i 

Source

alors vous pouvez passer la valeur à IE comme ceci:

START "YOUR_WINDOW_NAME" /MAX /D"C:\Program Files\Internet Explorer\" iexplore %TOOLOUTPUT% 

I supposons que le code de l'application qui détermine l'URL est trop compliqué pour être reproduit directement dans un fichier séquentiel, ou que la source de l'exécutable a été perdue. Sinon, personnellement, je préférerais que la logique soit visible dans le fichier batch lui-même.

+0

Merci Joshua, cela a fonctionné parfaitement. Le code de l'application était trop difficile à reproduire dans un fichier batch – kgbland

0

start %1 %2

0

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.

5

Si la chaîne renvoyée contient une seule ligne, vous pouvez utiliser FOR /F pour définir la valeur d'une variable d'environnement.Par exemple:

s1.cmd

echo this is a one line string 

s2.cmd

@SETLOCAL 
@ECHO OFF 
for /f "tokens=*" %%a in ('cmd /c s1.cmd') do set MY_VAR=%%a 
echo got: %MY_VAR% 
ENDLOCAL 

Résultat

C:\> s2.cmd 
got: this is a one line string 

C:\> 
+0

Oh, bien. Beaucoup, beaucoup mieux que ma solution (qui était un reste de l'époque de command.com, me semble: D). Upvoted ceci. –

Questions connexes