ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

コマンドプロンプトの出力を、ファイルに保存する

ちと作業をしていて少し煮詰まってきたので、気分転換に。(わはは


ちょっと前に、作業の過程をログに取りましょう。なんてトピックを読んだ事がありました。

確かになぁ と思ったのですが、上の動作環境って、Linuxな世界を想定しているんですよね。
じゃぁ、「Windowsな世界は どーすりゃいいの?」と思った訳です。
コマンドプロンプトのバッファサイズを無茶苦茶多くするって力技も考えられるんですが、スマートじゃないですしねぇ。


この間から そういった要件を思い出しては、ぐーぐる様に検索キーワードをとっかえひっかえしつつ、お伺いを立てていた訳です。


で、まぁ、ある程度 Windowsで、作業ログを取る方法について、見込みが立ってきたので、紹介をば。

1.DOS process LOG writer(doslog)を使う

PHOENIXさんが作られたアプリケーションです。

使い方例を、以下に示します。

$ set LOG_FILE=/OUT log.txt

$ doslog cmd
実行しています...
> cmd
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

$ dir /w
 ドライブ F のボリューム ラベルは ボリューム です
 ボリューム シリアル番号は C8D2-1C4A です

 xxx のディレクトリ

[.]          [..]         Doslog.exe   doslog.txt   log.txt
               3 個のファイル              65,398 バイト
               2 個のディレクトリ  50,034,937,856 バイトの空き領域

$ exit

所要時間 = 14 秒 031
終了コード=0
log.txt に子プロセスが吐き出した出力が保存されています

ちなみに、log.txtは、こんな風になっています。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

$ ドライブ F のボリューム ラベルは ボリューム です
 ボリューム シリアル番号は C8D2-1C4A です

 xxx のディレクトリ

[.]          [..]         Doslog.exe   doslog.txt   log.txt      
               3 個のファイル              65,398 バイト
               2 個のディレクトリ  50,034,937,856 バイトの空き領域

$

2.Tee.vbsを使う

吉岡さんという方の作られた、Tee.vbsを使います。VBScriptで作られています。

使い方を、以下に示します。

$ cmd 2>&1 | cscript tee.vbs log.txt
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

$ dir
 ドライブ F のボリューム ラベルは ボリューム です
 ボリューム シリアル番号は C8D2-1C4A です

 xxx のディレクトリ

2006/11/12  22:26    <DIR>          .
2006/11/12  22:26    <DIR>          ..
2006/11/12  22:26                 0 log.txt
2006/10/22  01:01             2,577 Tee.TXT
2006/11/12  12:43             1,132 Tee.VBS
               3 個のファイル               3,709 バイト
               2 個のディレクトリ  50,034,937,856 バイトの空き領域

$ exit

ちなみに、log.txtは、こんな風になっています。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

$ ドライブ F のボリューム ラベルは ボリューム です
 ボリューム シリアル番号は C8D2-1C4A です

 xxx のディレクトリ

2006/11/12  22:26    <DIR>          .
2006/11/12  22:26    <DIR>          ..
2006/11/12  22:26                 0 log.txt
2006/10/22  01:01             2,577 Tee.TXT
2006/11/12  12:43             1,132 Tee.VBS
               3 個のファイル               3,709 バイト
               2 個のディレクトリ  50,034,937,856 バイトの空き領域

$

3.Cygwin版のscriptコマンドを使う

上の2つは、標準出力と標準エラー出力を、ファイルに保存してくれます。
しかし、標準入力というか、キーボードから入力した内容までは保存してくれません。


という訳で、Cygwin版のscriptコマンドです。
ちなみに、適当に突っ込んだので、どのパッケージに含まれているのか知りません。あるかな〜と思って、バンバン突っ込んだら あった。という状況です。


使い方を、以下に示します。

bash-3.1$ script log.txt
スクリプトを開始しました、ファイルは log.txt です
sh-3.1$ dir
FePy.url  IPCE  Public\ SVN\ repository.url  TODO  log.txt  trunk  website
sh-3.1$ exit
exit
スクリプトを終了しました、ファイルは log.txt です

ちなみに、log.txtは、こんな風になっています。

スクリプトは Sun Nov 12 22:33:50 2006
 に開始しましたsh-3.1$ dir
FePy.url  IPCE  Public\ SVN\ repository.url  TODO  log.txt  trunk  website
sh-3.1$ exit
exit

スクリプトは Sun Nov 12 22:34:02 2006
 に終了しました

Cygwin版のscriptは実行すると、シェルがCygwinのshになっちゃうようです。
まぁ、作業ログに残るんだから、少々の事は目をつぶりましょう。

まとめ

入力内容も保存してくれるという点では、Cygwin版のscriptコマンドかな?という気がします。
ただ、手軽に使いたい向きには、doslogやtee.vbsも お奨めでしょうね。


他に作業ログを残す方法があるんじゃないかな?と思っているんですが、ちょっと思いつきません。
どなたか、ご存知の方、居られませんですかねぇ。