head コマンドが作れるか? (4)
さて、前回までのことはすっぱり忘れよう。
思い出すのは、8/8: 【続々】標準入力からの読み取りの回だ。
そこに書いたスクリプトを再掲する。標準入力からの標準出力へのコピーである。(100個連続した空行がないと仮定)
スクリプトA: @echo off setlocal enabledelayedexpansion set N=0 :loop set X= set /p X= if not defined X ( if %N% == 100 goto :eof set /a N=N+1 goto loop ) for /l %%I in (1,1,%N%) do echo. set N=0 echo !X! goto loop
これを使って、リダイレクトでファイルが読めればうまく行くのではないか?
スクリプトB: @echo off call :subr < %1 goto :eof :subr setlocal enabledelayedexpansion set N=0 set L=0 :loop set X= set /p X= set /a L=L+1 if %L% geq 20 goto :eof if not defined X ( if %N% geq 100 goto :eof set /a N=N+1 goto loop ) for /l %%I in (1,1,%N%) do echo. set N=0 echo !X! goto loop
これでうまくいっているようだ。% %% ! < > | & 等を含んだファイルでもそのまま表示されている。もちろん空行もカットされない。
もう少しテストしてみて、問題なければ引数処理を整えれば出来上がりだ。
一旦終わり