Tee for ToeKick 実行コマンドラインまで含めてログファイルに出力するコマンド

#はじめに
おつかれ様です！ [コマンドプロンプト(cmd.exe) Advent Calendar 2015](http://qiita.com/advent-calendar/2015/cmd) 19日目の記事を投稿します。
★ 18日目は @kunst1080 さんの ["BATファイルでUCaseとLCase"](http://kunst1080.hatenablog.com/entry/2015/12/18/234651) でした。いつの間にか記事がすり替わってる！
★ 20日目も @kunst1080 さんで ["BATファイルで、ロックファイルを使った排他制御を行う"](http://kunst1080.hatenablog.com/entry/2015/12/20/213920) です。

#ほったん
バッチファイルを書いてると、よくこんな感じの記述になってつらみ

```
@echo off
echo call job1.bat a b c >> job.log
call job1.bat a b c >> job.log

echo call job2.bat d e f >> job.log
call job2.bat d e f >> job.log

echo call job3.bat g h i >> job.log
call job3.bat g h i >> job.log
```
UNIXには [teeコマンド](http://linuxjm.osdn.jp/html/gnumaniak/man1/tee.1.html)とかあっていいな、コマンドプロンプトでも teeがしたい！
けど teeコマンド使っても、まだ結構面倒な気がするな。。。よし俺々コマンド作ろう！！

#じゅんび
https://github.com/nmrmsys/toe からリポジトリをクローンして、コマンドプロンプトでそのフォルダに移動
※フォルダを開いたエクスプローラーのアドレスバーで cmdとか打つと簡単に準備ができて便利です。
 
#つかいかた
とりあえず、オプション無しでコマンドを実行するとヘルプが出ます。

```
C:\Users\nmrmsys\Desktop\toe>toe
Usage: toe [output file] / [command] or [command] | toe [output file]

Options:
  -a append to output file (default)
  -o overwrite output file
  -t adding timestamp prefi
```

基本的な使い方は、コマンドの後に出力ファイル名、/ で区切って、実行するコマンドを指定します。

```
C:\Users\nmrmsys\Desktop\toe>toe test.log / test.bat -foo /bar baz
>test.bat -foo /bar baz
test1 test1 test1
test2 test2 test2
test3 test3 test3
```

実行したコマンドラインと実行結果が、画面と指定したファイルに出力されます。

```
C:\Users\nmrmsys\Desktop\toe>type test.log
>test.bat -foo /bar baz
test1 test1 test1
test2 test2 test2
test3 test3 test3
```

tee とは逆で、追記モードがデフォルトなので、連続実行すると、こうなります。

```
C:\Users\nmrmsys\Desktop\toe>toe test.log / test.bat a b c
>test.bat a b c
test1 test1 test1
test2 test2 test2
test3 test3 test3

C:\Users\nmrmsys\Desktop\toe>type test.log
>test.bat -foo /bar baz
test1 test1 test1
test2 test2 test2
test3 test3 test3

>test.bat a b c
test1 test1 test1
test2 test2 test2
test3 test3 test3
```

コマンド実行時の終了コードを、toeコマンドで返すようにしているので、エラー処理等も可能です。

```
C:\Users\nmrmsys\Desktop\toe>type test.bat
@echo off
echo test1 test1 test1
echo test2 test2 test2
echo test3 test3 test3
exit /b 999

C:\Users\nmrmsys\Desktop\toe>toe test.log / test.bat
>test.bat
test1 test1 test1
test2 test2 test2
test3 test3 test3

>echo %ERRORLEVEL%
999
```

#おうよう
-t オプションを指定すると、実行結果の前後に開始・終了日時も出力します。

```
C:\Users\nmrmsys\Desktop\toe>toe -t test.log / test.bat
START: 2015/12/19 00:00:00
>test.bat
test1 test1 test1
test2 test2 test2
test3 test3 test3
END: 2015/12/19 00:00:00
```

コマンドをダブルクォートでくくると、パイプリダイレクトも使えます。

```
C:\Users\nmrmsys\Desktop\toe>toe test.log / "test.bat | sort /r"
>test.bat | sort /r
test3 test3 test3
test2 test2 test2
test1 test1 test1

C:\Users\nmrmsys\Desktop\toe>echo %ERRORLEVEL%
0
```
しかし現状、何故かコマンド実行時の終了コードが正常に取得出来ない。。。
bashの [$PIPESTATUS](http://kawa0810.hateblo.jp/entry/2015/01/12/213450) みたく、終了コードの取得方法が異なってる、もしくは取れないとか？

あと一応、下記のように指定すれば teeと同様に実行できるようにもしてます。まあ基本使わないけど

```
C:\Users\nmrmsys\Desktop\toe>test.bat -foo /bar baz | toe test.log
test1 test1 test1
test2 test2 test2
test3 test3 test3
```

#さんこう
- [Tee.VBS 標準入力を標準出力と指定ファイルまたは標準エラーに複写するVBScript](http://www.vector.co.jp/soft/win95/util/se319986.html)
- [Tee.CMD 標準入力を標準出力とファイル/標準エラーに複写するバッチファイル](http://www.vector.co.jp/soft/winnt/util/se426028.html)
- [javascriptで日付フォーマッタ](http://qiita.com/egnr-in-6matroom/items/37e65bb642d2e158804c)

#おしまい
スクリプトのTODOに書いてますが、toe test.log / cmd とかすると、固まるので
それは何とかしたい所ですが、果たして出来るのか？

コマンドプロンプトAdventといいつつ、ソースが全篇[JScript](https://ja.wikipedia.org/wiki/JScript)なのはどーなんだと多少思ったりもしたけれど
[VSCode](http://qiita.com/naru0504/items/9a16b50f7425727b66cd)の JavaScriptモードを使ってコーディングしてたら、めちゃ快適だったので、これでいいのだと納得

コマンドプロンプト芸とは、枯れた技術の総合火力演習、闇を切り裂く刹那の煌き、全てを終焉へと導く力

それではお先にしつれいします！