「Yahoo! 知恵袋」の以下の質問を解いてみました。
はじめに
入力された文字列を標準出力に出力するだけのバッチファイルを用意します。
q12149830757.bat
@echo off
setlocal
echo 文字列を入力してください。
set /p s="> "
echo.
echo 入力した文字列は %s% です。
endlocal
バッチファイルを実行すると、文字列の入力を求められます。
C:\>q12149830757.bat
文字列を入力してください。
> _
文字列を入力すると、入力した文字列が画面上に表示されます。
C:\>q12149830757.bat
文字列を入力してください。
> 0
入力した文字列は 0 です。
ファイルとリダイレクトを利用した場合
入力する文字列をあらかじめファイルに書き出しておきます。
C:\>(echo 1) > q12149830757.txt
標準入力からファイルを読み込みつつバッチファイルを実行すると、入力した文字列が画面上に表示されます。
C:\>q12149830757.bat < q12149830757.txt
文字列を入力してください。
>
入力した文字列は 1 です。
コマンドとパイプを利用した場合
echo
コマンドとパイプを利用して標準入力から文字列を受け取りつつバッチを実行すると…
C:\>(echo 2) | q12149830757.bat
文字列を入力してください。
>
入力した文字列は 2 です。
入力した文字列は画面上に表示されますが、末尾に余分な半角空白が出力されてしまいます。
そこで set
コマンドでも試してみたのですが…
C:\>(< NUL set /p t=2) | q12149830757.bat
文字列を入力してください。
>
入力した文字列は 2 です。
半角空白がもう一つ増えてしまいました。
このあたりちょっともやもやしますが、とりあえず echo
コマンドとパイプの間に半角空白を含めないようにすれば問題なさそうです。
C:\>echo 2| q12149830757.bat
文字列を入力してください。
>
入力した文字列は 2 です。
おわりに
バッチファイルでまじめに解くとしたら、以下を参考にする必要がありそうですね。