1

入力リダイレクトは、.exe ファイルまたは内部 Windows コマンドに対して機能しています。

    app.exe < ListOfNames.txt
    sort < input.txt

ただし、バッチ スクリプトにリダイレクトしようとしても機能しません。

test.bat :-

 @echo off
 echo %1 %2

を使用して実行します:-

test.bat<input.txt

input.txt には 2 つの文字列があります。

ただし、バッチ スクリプトの場合でも、出力のリダイレクトには問題なく機能しています。

これは予期された動作ですか、それとも構文ミスを犯していますか? 手動で解析する代わりに、ファイルから引数を読み取る他の方法はありますか?

4

2 に答える 2

3

コマンドラインで提供されるパラメーターは、stdin(リダイレクトされた入力が送信される場所)とは完全に異なります。これは、バッチスクリプトと.exeプログラムの両方に当てはまります。

一部のプログラムは、コマンドライン引数またはstdinを介して同じ値を受け入れるように設計されています。しかし、それは標準ではありません。これは、プログラムの開発者によって提供される機能です。

バッチスクリプト内でリダイレクトされた入力を読み取りたい場合は、次のいずれかを実行する必要があります。

1行を読むには:

set /p "ln="
echo %ln%

ループ内のすべての行を読み取るには:

for /f "delims=" %%A in ('findstr "^"') do (
  echo %%A
)
于 2012-09-20T12:27:23.023 に答える
0

dbenhams の回答に加えて、次set/pのように、入力リダイレクトのために複数の行を読み取ることもできます。myBatch.bat < commands.txt

@echo off
set "line_1="
set "line_2="
set "line_3="
set /p line_1=
set /p line_2=
set /p line_3=
set line_

しかし、これは次のような入力パイプでは失敗しますtype commands.txt | myBatch.bat

于 2012-09-20T12:44:56.700 に答える