コマンドプロンプトのログを取る(完結)

【追記】2020年10月30日
リンク切れ修正 ソースの置き場を github に変更

【追記】2019年12月13日
このページは過去の記録として残しています。現在コマンドプロンプトの実行ログをとる方法としては、この記事を書いた当時でさえ時代遅れだったコードです。ご注意を。
また、Powershell を使えばコマンド実行ログは簡単にとることが可能です💦
確実な方法ではありませんが、PowershellでのStart-Transcript及びStop-Transcriptを調べてください。Powershellからcmd.exeシェルを起動することでコマンドプロンプトの実行ログは十分とれます。ただし、変なゴミがつくことがありますが・・・
よしなに。。。


コマンドプロンプトのログを取る(その3)
コマンドプロンプトのログを取る(その2)
コンソール(CMD.EXE)のログを取る (不完全版)
の続きです。

やってることは、単純で下図のとおり。

ほったらかしにしてたコマンドプロンプトのログ取りなんですが、その3までで気になってた点が、コンソールに自分が入力したコマンドラインがエコーされる、というところ。画面にエコーされるだけで、ログファイルには出力されないので実害はないのですが、ちょっと気になって・・・。

で、子プロセスで起動するcmd.exe に起動オプション(/Q エコーをオフ?)を追加し、入力コンテキストにログファイルのハンドルも渡すことでなんとかコマンド入力のエコーを非表示することができました。 恥ずかしながらCMD.EXE(コマンドプロンプト)の起動オプションで /Q なんて知らなかった(^^;;;

その他若干修正したのが↓

全部を固めたやつはこちら。
全てのソースはこっちに移動

これで自分用途で使う分には問題ないんですが、やはり汎用性は全然ありません。単純なコンソールプログラムならいいんですが、コンソールウィンドウを乗っ取るようなプログラムやユーザー操作を行う、ユーザーと対話するようなプログラム(たとえばftpとかtelnetとか) だと期待するような動作はしません。moreとかのページャーとか全滅(ーー;;;