30157
**Windows のコマンドプロンプトで、画面出力した上で、テキスト形式でログ出力したいのですが、どうすれば良いでしょうか？**

* * *

**例えば、chkdsk**  
・時間がかかる上に、進行状況に応じてメッセージが追加されていきます  
・ログは最後にまとめて出力すれば良いのですが、途中で、誤ってコマンドプロンプトを閉じた時、ログを確認する方法はあるでしょうか？  
・コマンドプロンプトを一旦閉じてしまったら、処理の履歴を確認することは出来ない？

* * *

**今、下記を試しているのですが、どういう意味ですか？**  
・画面には何も表示されていないのですが、処理が全部終了してから「出力する」という意味でしょうか？  
・進行状況に応じてメッセージが追加されていったりはしない？？

> コマンド > ファイル名
CC BY-SA 3.0
2016-11-06T14:22:01.300
30142
2016-11-08T00:40:34.040
7886
question
windows コマンドプロンプト
Windows のコマンドプロンプトで、画面出力した上で、ログにも出力したい
Windowsに標準搭載されているPowerShellをつかって、コマンドプロンプトから以下を実行すればいいと思います。

```

    powershell -Command "<コマンド> 2>&1 | Add-Content -Path <ファイル名> -PassThru"
    
```

なお、

> 今、下記を試しているのですが、どういう意味ですか？

についてですが、`>`は、コマンドの標準出力(i.e.
エラー以外の画面出力)をファイルに書きこむ、リダイレクトと呼ばれるものです。これをした場合、画面には出力されません。ファイルには進行状況に応じて出力が追加されます。

私の上記コマンドの`2>&1`はコマンドの標準出力にエラー出力をまとめるものです。それをさらに`|`(パイプ)によってPowerShellコマンドレットのAdd-
Contentに渡して処理させています。
CC BY-SA 3.0
2016-11-06T17:26:54.757
30157
2016-11-06T17:26:54.757
19437
30142
answer
別解。  
Windows 10 Anniversary Update だと Windows Subsystem for Linux と言う機能が使えます。  
それ以外の Windows でも cygwin / mingw をインストールしてあれば同じように  
Unix コマンドの `tee` が使えます。

```

    C> examplecommand | tee logfile.txt
    
```

とすると `examplecommand` の標準出力が `logfile.txt` とコンソールの両方に同時に出力されます。

リダイレクトの話は既に出ているので解説略。

> 途中で、誤ってコマンドプロンプトを閉じた時、ログを確認する方法はあるでしょうか？  
>  ・コマンドプロンプトを一旦閉じてしまったら、処理の履歴を確認することは出来ない？

標準の `cmd.exe` というかコマンドプロンプトウィンドウには  
[閉じた後も] ログを永続化して保存する機能はなさそうです。

`chkdsk` のログを `tee` で保存してみたら途中経過のパーセント表示も保存されてしまい  
ちょっとかっこ悪いログになっちゃいました。
CC BY-SA 3.0
2016-11-08T00:40:34.040
30200
2016-11-08T00:40:34.040
8589
30142
answer