2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コマンドプロンプト(cmd.exe)Advent Calendar 2015

Day 19

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

Last updated at Posted at 2015-12-18

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

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

@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コマンドとかあっていいな、コマンドプロンプトでも 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 みたく、終了コードの取得方法が異なってる、もしくは取れないとか?

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

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

#さんこう

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

コマンドプロンプトAdventといいつつ、ソースが全篇JScriptなのはどーなんだと多少思ったりもしたけれど
VSCodeの JavaScriptモードを使ってコーディングしてたら、めちゃ快適だったので、これでいいのだと納得

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

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?