Get-ChildItem コマンドレットの使用

DIR コマンドの再現 (および拡張)

基本的に、Get-ChildItem コマンドレットの機能は dir コマンドと似ています。たとえば、Windows PowerShell プロンプトで Get-ChildItem と入力すると、現在の場所にあるオブジェクトに関する情報が返されます。

Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Documents and Settings\kenmyer

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----          3/1/2006   9:03 AM            Bluetooth Software
d---s         5/10/2006   8:55 AM            Cookies
d----          5/9/2006   2:09 PM            Desktop
d-r--          5/9/2006   8:22 AM            Favorites
d-r--          5/9/2006   2:24 PM            My Documents
d-r--          3/1/2006   8:15 AM            Start Menu
d---s          3/1/2006   3:41 PM            UserData
d----         3/16/2006   3:29 PM            WINDOWS

この機能だけでも便利ですが、現在の場所にあるアイテムを表示する以外にも、Get-ChildItem にはいろいろな機能があります。たとえば、上記の出力は見るべき情報が少ないと思うのではないでしょうか。というのも、このフォルダには少数のサブフォルダしか含まれないためです。そのため、Get-ChildItem がサブフォルダ名だけでなくサブフォルダの "コンテンツ" も返す (つまり、サブフォルダのすべてのファイルとフォルダを表示する) 方が役に立つこともあります。問題ありません。-recurse パラメータを追加するだけです。

Get-ChildItem -recurse

当然ながら、処理対象は現在の場所に限定されていません。また、ファイルとフォルダのみの処理に限定されてもいません。すべての環境変数を表示する場合、次のように環境変数の "ドライブ" へのパスを渡すだけです。

Get-ChildItem env:

それでは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall のレジストリ サブキーをすべて表示する場合はどうでしょうか。その場合、次のように指定します。

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

メモ   Get-ChildItem は、サブキーに含まれるレジストリ値に関する情報を取得するときには使用できません。この場合、Get-ItemProperty コマンドレットを使用します。

こんなことなら一日中だってできます。たとえば、-include パラメータと -exclude パラメータを使用すると、ある場所に含まれる特定のアイテム群を簡単に取得できます。たとえば、フォルダ C:\Scripts にある .txt ファイルと .log ファイルに関する情報のみを表示するとします。この操作は簡単です。

Get-ChildItem c:\scripts\*.* -include *.txt,*.log

ご覧の通り、フォルダ C:\Scripts に含まれるすべてのファイル (*.*) を要求します。-include パラメータを付加し、*.txt と *.log という 2 つのファイルの種類を指定します (複数のファイルの種類を区切るにはコンマを使用します)。この場合、どのような戻り値になるでしょうか。.txt ファイルと .log ファイルのみが返されます。

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          4/6/2006   8:28 PM       3508 950.Log
-a---          5/6/2006  10:06 AM          0 Employees.txt
-a---          5/6/2006  10:06 AM          0 Employees_NODUPL.txt
-a---          5/6/2006  10:06 AM          0 ExcelData.txt
-a---          3/3/2006   9:24 PM      14894 methods.txt
-a---         4/28/2006   1:36 PM         41 new_name.txt
-a---          3/7/2006   1:44 PM       4112 read-write.txt
-a---         4/11/2006  11:04 AM         18 servers.txt
-a---          5/5/2006   9:09 PM      53358 tee.txt
-a---         4/26/2006  12:28 PM       1125 temporary_print_file.txt
-a---          5/6/2006  10:30 PM      34184 test.log
-a---          5/9/2006   3:17 PM         58 test.txt
-a---          4/6/2006  10:26 PM        205 test_NODUPL.txt
-a---         4/28/2006   1:16 PM         27 x.txt
-a---          5/8/2006   2:39 PM         25 y.txt

.txt ファイルと .log ファイル以外のすべてを取得する場合、-exclude パラメータを使用します。Windows PowerShell でこのパラメータを使用すると、返されるデータセットに .txt と .log は含まれません。この処理を行うコマンドは次のようになります。

Get-ChildItem c:\scripts\*.* -exclude *.txt,*.log

このスクリプトを実行し、結果を確認してください。

Get-ChildItem が返す情報は、Sort-Object コマンドレットにパイプ処理できます。これによって、他の形式でデータを並べ替えできます。名前ではなくサイズ (長さ) で並べ替えてファイルを表示する場合、次のようなコマンドを使用します。

Get-ChildItem c:\scripts\*.* | Sort-Object length

または、サイズが最も大きなファイルを最初に表示し、最も小さなファイルを最後に表示する場合、-descending パラメータを付加します。

Get-ChildItem c:\scripts\*.* | Sort-Object length -descending
Get-ChildItem のエイリアス
  • gci

  • ls

  • dir

関連リンク