このページの本文へ

前へ 1 2 次へ

Windows Info 第394回

コマンドの出力が長いとき、PowerShellではとりあえずselect-objectでなんとかする

2023年08月27日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 コマンドラインでコマンドを実行すると、長い出力が出てしまうことが多い。この問題は、コンピューターがまだ機械式端末装置などで印字出力をしていたときからの問題なので、さまざまな解決策が用意されている。今回はその対策を解説する。

Windowsでは、旧来のmore.comも利用できるが、Out-GridViewコマンドを使うとGUIウィンドウにコマンドの出力を表示できる

まずは基本的となる対策

 MS-DOS時代からの対策は、more.comコマンドである。more.comは、画面1面分の出力をすると、そこで出力を停止して、キー入力待ちとなる。Unix/Linux系では、その発展型となるlessコマンドもあり、逆方向にスクロールさせることも可能だ。

 more.comは、cmd.exeでもPowerShellでも利用できる。どちらも「C:\Windows\System32\more.com」が呼び出される。「.com」を省略してmoreとすることも可能だ。

dir | more

のようにコマンド出力をパイプ記号でmoreコマンドに送り込めばよい。

 Unix/Linuxには、head/tailコマンドが用意されている。これらは、先頭のn行/末尾のn行のみを出力するコマンドである。多くのコマンド出力は、一部分、特に先頭や末尾の行だけで十分なことがある。たとえば、コマンドがどんな出力をしているのかを知りたいときなどだ。

 Unix/Linuxのhead、tailコマンドは、オプションなしでは、先頭の10行、末尾の10行を出力できる。

ls | head        #先頭の10行を出力
ls | tail        #末尾の10行を出力

 同じ機能は、PowerShellおよびWindows PowerShell(以下、2つを合わせてPowerShell)のSelect-Objectコマンドでもできる。

dir | Select-Object -First 10    #先頭の10行を出力
dir | Select-Object -Last 10    #末尾の10行を出力

 コマンドの出力が何行あるのかは、Unix/Linuxならばwcコマンド、PowerShellならばMeasure-Objectコマンドで調べられる。それぞれオプションを付けることで、行数のみを表示できる。

dir | Measure-Object -Line    #PowerShell
ls | wc -l        #Unix/Linux

 PowerShellの場合、利用頻度の高いオブジェクトには「既定のビュー」という自動書式設定があり簡略表示がなされていることには注意したい。

 たとえば、dirコマンド(get-childitemのエイリアス)の場合、コンソールで出力するとMode、LastWriteTime、Length、Nameという4つのプロパティしか表示されない。しかし、「dir ファイル」は、System.IO.FileInfoというオブジェクトを出力しており、そこには多数のプロパティがある。これは、System.IO.FileInfoに対して、既定のビューと呼ばれる自動書式が設定されているからだ。

 しかし、上記のようにdirコマンドの出力をパイプで渡すと、System.IO.FileInfoオブジェクトが Measure-Objectに渡り、画面で見ているような出力は渡されない。このために、Measure-Objectは、正しくファイルの数を数えることができる。

 逆にmoreコマンドは、dirコマンドの画面出力と同じものを受け取る。このため、dirコマンドの表示出力そのままをページ表示できる。

 PowerShellではコマンドの出力を「Out-Gridview」コマンドでGUIウィンドウに表示できる。このとき表示されるのもmoreと同じく既定のビューで書式設定されたオブジェクトになる。しかし、以下のようにSelect-Objectコマンドを挟むことで、すべてのプロパティを表示できる(記事冒頭画面)。

dir | Select-Object * | Out-Gridview

 PowerShellでは、bashなどと異なり、コマンドはオブジェクトを出力する。どのようなオブジェクトが出ているのかは、Get-Memberコマンドで見ることができる。

dir | Get-Member

 dirコマンドの場合、System.IO.FileInfoまたはSystem.IO.DirectoryInfoが出力される。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン