実行ファイルを2つのパラメータを持つバッチファイルで実行しています。実行ファイルから変数を設定する
cmd /k ""executable" "param1" "param2""
これは私が起動したい文字列を返します。このリターンを変数に設定してIEで起動する方法を理解できません。
アイデア?
実行ファイルを2つのパラメータを持つバッチファイルで実行しています。実行ファイルから変数を設定する
cmd /k ""executable" "param1" "param2""
これは私が起動したい文字列を返します。このリターンを変数に設定してIEで起動する方法を理解できません。
アイデア?
FOR /F "tokens=*" %%i in ('%~dp0YOUR_APP.exe') do SET TOOLOUTPUT=%%i
は、あなたがそうのようにIEの上の値を渡すことができます:
START "YOUR_WINDOW_NAME" /MAX /D"C:\Program Files\Internet Explorer\" iexplore %TOOLOUTPUT%
私あなたは変数にあなたの実行可能ファイルの出力をキャプチャするには、次の構文を使用することができますurlを決定するアプリケーションコードが複雑すぎて、バッチファイルで直接再生できない、または実行可能ファイルへのソースが失われていることがあります。そうでなければ、私は個人的にはバッチファイル自体にロジックを表示する方が好きです。
ジョシュアありがとう、これは完全に機能しました。 アプリケーションコードがバッチファイルで再現するのが難しかった – kgbland
start %1 %2
編集:ロムロA. Ceccon任意のファイルシステムへのアクセスや汚い手口を含まないa much better solutionを掲載。これを参照のために残しておきます(9x互換性が必要な場合はcommand.comでも動作しますが、Romuloのソリューションをお勧めします)。
テンプレートから動的に生成する中間ヘルパースクリプトを使用して設定した環境変数に移動します。
set INTERMEDVAR=
は確認してください:あなたはのは、次の内容のあなたのヘルパースクリプトテンプレートhelper.tpl
を呼ぶことにしましょう
helper.tpl
には1行しかない(末尾のCRLF!はありません)、そこに等号の後にスペースがないことを確認してください。次に、あなたのヘルパーにまとめヘルパーテンプレートと出力の内容をコピー
cmd /k ""executable" "param1" "param2"" > my_output_file.tmp
:
今、あなたのメインのスクリプトで、一時ファイル(のはmy_output_file.tmp
それを呼びましょう)にあなたのコマンドからの出力をキャプチャスクリプトのはmy_helper_script.cmd
それを呼びましょう:
copy /b helper.tpl + my_output_file.tmp my_helper_script.cmd
次に現在のコンテキストでヘルパースクリプトを評価:
call my_helper_script.cmd
今INTERMEDVAR変数が(...それは複数行を出力した場合、あなた自身にしている)、「実行」からの出力の最初の行に設定されているあなたは今、IEを起動することができます。
start iexplore.exe "%INTERMEDVAR%"
そして、作成したファイルをクリーンアップすることを忘れないでください:
del /q /f my_output_file.tmp my_helper_script.cmd
並列に複数回呼び出されたときにこれは明らかに動作しません - あなたは現在のCMDを使用して一時ファイルおよびヘルパースクリプト名をパラメータする必要があります.exeのPID(例えば)は、互いの出力を上書きしないようにしますが、原則は同じです。
しかし、実際のシェルを入手できる場合は、それを使用してください。 cmd.exeは非常に面倒です。
返される文字列に1行が含まれている場合は、環境変数の値を設定するのにFOR /F
を使用できます。たとえば、次のように
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
結果
C:\> s2.cmd
got: this is a one line string
C:\>
オハイオ州いいね。私の解決策(command.comの時代から残っていたメチンクス:D)よりずっと優れています。これをアップした。 –
シェルが終了して文字列を返すようにするには、/ C(/ Kではなく)を使用する必要があることに注意してください。 –