コマンドプロンプトでコマンドの実行履歴(ヒストリ)を取得するTech TIPS

コマンドプロンプト上で実行した過去のコマンドを引用したり、バッチファイルなどに組み込みたかったりする場合は、コマンド履歴の一覧を表示させてコピーすればよい。その方法を紹介する。

» 2018年09月27日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 7/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


コマンドプロンプトの実行履歴を取得する

 コマンドプロンプトで実行したコマンドを後で再実行したい場合、[↑][↓]などの矢印キーを使えば過去のコマンド実行履歴(コマンドヒストリ)を順番に表示させることができる。目的のコマンドが見つかれば、そのまま[Enter]キーを押せば再実行できるし、[←]や[→]キーでカーソルを移動して、再編集してから実行することもできる。

[F7]キーでコマンド履歴を確認する [F7]キーでコマンド履歴を確認する
コマンドプロンプト上で履歴を参照したい場合、[F7]キーを押すと、過去の履歴がウィンドウ表示される。ここから過去のコマンドを呼び出して再実行するのは簡単だが、実行せずに、コマンド列を取り出すのは簡単ではない。

 では過去のコマンドヒストリを引用したり、それをベースにして、新しいバッチファイルなどを作ったりしたい場合はどうすればよいだろうか?

 そんな場合は、コマンドの履歴一覧を表示させ、それをコピー&ペーストすればよい。上のTIPSでは、[F7]キーを押して、コマンドの履歴ウィンドウを表示させる方法を紹介しているが、これだとテキストデータとして引用することは難しい。

 UNIXやLinuxのシェルだと、h(history)というコマンドがあり、これを実行すると過去のコマンドの一覧がテキストとして表示されるので、ファイルに保存すれば簡単に再利用できる。

 Windows OSのコマンドプロンプトの場合、historyコマンドはないが、類似のコマンドとして、「doskey /h」(もしくは「doskey /history」)というコマンドがある。これを実行すると過去のコマンド履歴の一覧が表示されるので、コピーしてエディタに貼り付けたり、リダイレクトしてファイルに保存したりして再利用すればよい。

doskey /hでコマンド履歴を取得する doskey /hでコマンド履歴を取得する
実行したコマンドの履歴はdoskeyコマンドで確認できる。ちなみにdoskeyというのは、コマンドライン入力を補助するためのヒストリ/マクロ機能アドオンプログラムのこと。古いMS-DOSの時代から使われているので、こう呼ばれている。

 なお履歴からコマンドを選んで再実行するには、[F7]キーを押してカーソルを使って選ぶか、[F9]を押してコマンド番号を入力して実行するしかない(コマンド番号は[F7]キーを押した場合にしか表示されず、「doskey /h」では表示されない)。UNIXや後述のPowerShellのように、コマンド番号を指定して素早く再実行することはできない。

 またコマンド履歴を保存しておいて、次回コマンドプロンプトを起動したときに、それを引き継ぐ方法はないし、複数のコマンドプロンプトのウィンドウ間で履歴を共有する機能もない。履歴はウィンドウごとに独立して扱われ、終了すると、その履歴は全て破棄されて、もう一度呼び出すことはできない。

履歴の最大数はいくつ? それを変更するには?

 Windows OSのコマンドプロンプトの場合、履歴の最大数は、デフォルトでは50個までとなっている。これよりも多くのコマンドを実行すると、古い履歴から順に消えていってしまう。

 この最大数は、コマンドプロンプトのプロパティ画面で確認したり、変更したりできる。プロパティ画面の[オプション]タブを開くと、[コマンドの履歴]というグループの中に[バッファー サイズ]という項目があるので、この値を大きくすればよい。最大で「999」まで設定できる。

プロパティ画面を開く プロパティ画面を開く
コマンド履歴の最大数は、コマンドプロンプトのプロパティ画面で設定する。

履歴の最大数を設定する 履歴の最大数を設定する
[オプション]タブの[コマンドの履歴]にある[バッファー サイズ]で最大数を設定する。999まで増やすことができる。同じコマンドが連続した場合に、重複する履歴を破棄するようにしておくと、さらに幾つか余計に保存できる。

 上の画面にある[重複する古い履歴を破棄]とは、同じコマンドを繰り返して実行した場合に、履歴上はそれらを1つだけ保存するようにする機能である。例えば何度もdirコマンドを実行しても、連続して実行していれば、1つだけ履歴として保存される(全く同じコマンドライン文字列でない場合は、それらは全て記録される)。これにより、履歴数を抑えることができる。

[参考]PowerShellにおけるコマンド履歴の管理

 PowerShellにもコマンド履歴の管理機能があるが、その機能はUNIXやLinuxのhistory機能に近くなっている。

 コマンド履歴の一覧は「Get-History(エイリアスはh)」コマンドレットで表示できる。再実行するには、「Revoke-History(エイリアスはr)」コマンドレットに番号を指定すればよい。

PowerShellにおけるコマンド実行履歴の操作例 PowerShellにおけるコマンド実行履歴の操作例
PowerShellの場合は、コマンドの履歴を表示したり、再実行したりするのは簡単である。

 保存できるヒストリの最大数は、デフォルトでは4096となっているが、これをさらに増やすには、「MaximumHistoryCount」という変数に値をセットすればよい。最大で3万2767まで設定できる。

PowerShellにおけるコマンド履歴の最大数の確認と設定 PowerShellにおけるコマンド履歴の最大数の確認と設定
コマンド履歴の最大数はMaximumHistoryCount変数で設定されている。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。