- note -

Batch

9/10

batでtee   - Last modified:2014/2/15

tee … 標準入力(パイプからの入力など)を標準出力とファイルに同時出力するコマンド。 batの機能だけでteeは実現出来るか?
結論から言うと、紛い物でいいなら出来るという感じです。
以下、紛い物ソース(の一例)。
ちなみにこれを動かすにはtailが必要です。

tee.bat

@echo off
setlocal

if "%~1" == "" exit /b

break > "%~1"
start "tee - %~1" tail /f "%~1"
find /v "" > "%~1"
pause<con
taskkill /fi "windowtitle eq tee - %~1*" >nul 2>nul
こいつの紛い物ポイントは2つ。
  • 別ウィンドウを作ってそこに出力する。
  • 空行をスキップする。
2つ目は標準入力の受け取りで書いた内容です。
あっちで書いたふうにfor /fを使いたいところですが、このコマンドは
EOFを検知してから動き出すので、入力即出力が要求されるケースでは使えません。
まぁこのあたりの挙動はたった10行程度のソースなので
適当にカスタマイズしてもらえればいいと思います。
例えば別ウィンドウを作らず同一コンソール上に出力したい場合は、startに/bをつけるだけです。
え? tailのプロセスが残る?
だいじょうぶ、問題はありません。 こんなときのためにタスクマネージャがあるのです。