1

私はWindowsで実行している古いDOSプログラムを持っています。このプログラムには、ユーザーが数字を入力することで移動できるいくつかのメニューがあります(これにより、自動的に別のメニューに移動します。「Enter」を押す必要はありません)。場合によっては、ユーザーはファイルの名前を入力してからEnterキーを押す必要があります。

バッチファイルを使用して、このプログラムとのユーザーの対話を自動化しようとしています。これまでのところ、このリソースの助けを借りて。私は、(Enterキーを押さずに)数字を入力するだけでよいメニューを介してユーザーの操作を自動化することに成功しました。ただし、メニューでファイル名を入力してEnterキーを押す必要があると、問題が発生します。

これは、最初の2つのメニュー選択(4、次に6)を自動化する際に機能するコードです。

(echo 4 
echo 6
) | execute.exe

6を押した後、次のメニューではテキストファイル名を入力してEnterキーを押す必要があります。ただし、上記のコード(ファイルの名前を入力する必要があるインタラクションで停止すると思います)でさえ、どういうわけか自動的にEnterキーを押します-つまり、ファイルには名前がありません。これが私を混乱させているものです。私がこのようなことをした場合も同じ結果になります:

(echo 4 
echo 6
echo sometext
) | execute.exe

またはこれ:

(echo 4 
echo 6
echo.
) | execute.exe

PAUSEを挿入しても、何も変更されません。どういうわけか、バッチファイルは、テキストを入力してEnterキーを押す必要があるメニューセクションを特定の方法で処理しています。助けていただければ幸いです。

4

1 に答える 1

0

問題

これは、execute.exeプログラムがあなたが与えた入力を解釈していると私が想像している方法です。

echo 4
echo 6

に変換します

4
6
_

アンダースコア '_' は、空の空白行のプレースホルダーです。

したがって、execute.exe は最初の番号を待ちますが、送信していますecho 4

4
_

したがって、最初の番号を受け入れてから次の番号プロンプトに移動し、空白の Enter キーを無効な入力として無視し、2 番目の番号を再入力するように求めます。送信echo 6

6
_

これで、2 番目のプロンプトの 2 番目の番号が受け入れられ、空の空白行によってすぐに閉じられるファイル プロンプトに進みます。

プログラムは新しい行を想定していないため、入力バッファーに実際のコマンドとして格納されています。私の最善の推測は、echo コマンドによって引き起こされる末尾の改行なしで数字のみを出力することです。


答え

エコーの代わりに数値入力に対してこれを試してください。 私はこれを自分で試したことがないので、うまくいくかどうかはわかりません. また、これを 6 で実行し、4 で echo を使用することもできます。

<nul set /p ="4"
<nul set /p ="6"

このコマンドは、最初/唯一の文字として引用符または等号をset /p出力できないことに注意してください。より詳しい情報"=

(
<nul set /p ="4"
<nul set /p ="6"
echo filename
) | execute.exe
于 2013-01-21T23:05:19.523 に答える