バッチファイルでCygwinのteeコマンドを使うと文字化けすることがあり、自作のteeコマンドを作成しました。本家teeコマンドと同様に標準出力とログファイルをリアルタイムに更新できます。
以下のように1ファイルのみ指定してコマンドログを取得する用途のみ対応しています。
ping (URLやIPアドレス) | mytee log.txt
なお、本プログラムは特定用途でのみ使用するのでエラーチェックはしていません。たとえば、ログファイルをコマンド引数として与えないと例外発生します。
Program.cs
using System;
using System.Text;
using System.IO;
namespace mytee
{
class Program
{
static void Main(string[] args)
{
Encoding encoding = System.Text.Encoding.GetEncoding("shift_jis");
bool firstWrite = true;
string outFile = args[0];
string readData;
while ((readData = Console.ReadLine()) != null)
{
// 行データ作成
string line = readData + Environment.NewLine;
// 表示
Console.Write(line);
// ファイル出力
if (firstWrite)
{
// 初回は新規書き込み
File.WriteAllText(outFile, line);
// 初回フラグクリア
firstWrite = false;
}
else
{
// 2回目以降は追記
File.AppendAllText(outFile, line);
}
}
}
}
}