2

program.exe と呼ぶインタラクティブなコマンド ライン プログラムがあります。実行中に、さまざまな処理を実行する一連のさまざまなコマンドを入力できます。これらを doA、doB、doC、および quit と呼びます。結局のところ、私が program.exe で最初に実行したいことは常にdoA です。いくつかのキーストロークを節約し、起動時に program.exe にコマンド doA を自動的に実行させたいと考えています。残念ながら、program.exe の作成者がその機能を実装していないため、コマンド ラインで "doA" を渡すことはできません。

私の見方では、いくつかのオプションがあります。

  • program.exe を呼び出し、doA を stdin に書き込み、独自の stdin を program.exe の stdin にフックし、program.exe の sdtout を独自の stdout にフックする別のプログラムを作成します。これはおそらくうまくいくでしょうが、コンパイラを必要としない解決策があるかどうかを確認したいと思います

  • doA を program.exe の stdin に詰め込むには、バッチ ファイル マジックを使用します。質問させていただいた部分です。これが私がこれまでに試したことです:

echo doA | program.exe

これは、program.exe が doA を実行するという点で機能しますが、program.exe に対して他のコマンドを入力することはできません。エコーがprogram.exeのstdinを占有しています

more | echo doA | program.exe

これも機能し、私が求めているものに少し近づきます。program.exe が doA を実行すると、doA からの出力が表示されます。追加のコマンドを入力することもできますが、これらのコマンドからの出力が表示されません。さらに、quit コマンドを送信すると、program.exe は終了しますが (おそらく)、「more」コマンドでスタックしたままで、ctrl+c を押すまで行を入力し続けることができます。

質問: 私がバットファイルでやろうとしていることを行う別の方法はありますか? 概念的には、2 つのストリーム (キーボードと文字どおりの「doA」) を 1 つに結合し、それを program.exe に渡す必要があると思いますが、私はかなり外れている可能性があります。

4

1 に答える 1

2

まず、more | echo doA | program.exeあなたが思っていることをしません。doA を送信echoすると、これらのパイプステージが接続されなくなり、完全なシンクが作成されます。そのため、コマンドがエコーされません。それらはどこにも行かず、によって実行されませんprogram.exe。コマンドラインから直接目的を達成する簡単な方法はないと思いますが、小さなバッチファイルを使用することで簡単に解決できます。バッチファイルを作成します。たとえば、次のようにしますargs.bat

@echo off 
echo First command
more

今あなたのプログラムを実行しますargs|program.exe

于 2012-10-26T15:15:16.317 に答える