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

これでうまくいっているようだ。% %% ! < > | & 等を含んだファイルでもそのまま表示されている。もちろん空行もカットされない。
もう少しテストしてみて、問題なければ引数処理を整えれば出来上がりだ。

一旦終わり