オブジェクト配列をソートする
オブジェクト配列のソートには「Sort-Object」というCmdletを使います。
「Sort-Object」
普通に使うとファイル名の昇順ソートになります。
ファイル名の昇順ソート
MSH C:\> get-childitem | sort-object
Directory: FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar-- 2004/12/26 16:35 8419 CLDMA.LOG
-a--- 2005/09/03 23:32 736 devicetable.log
da--- 2005/08/18 0:45 Documents and Settings
d---- 2005/09/30 2:06 Inetpub
d---- 2004/02/22 22:22 j2sdk1.4.1_06
-a--- 2005/04/24 4:20 730 odbcconf.log
dar-- 2005/10/12 22:23 Program Files
d---- 2004/03/23 0:26 temp
d---- 2005/09/18 5:54 TestDir
da--- 2005/10/08 22:33 WINNT
da--- 2004/02/22 17:37 WUTemp
d---- 2004/02/28 2:33 マイ ダウンロード
「-property」をつけると指定プロパティでソート可能です。
「length」=ファイルサイズでソート
MSH C:\> get-childitem | sort-object -property length
Directory: FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2005/04/24 4:20 730 odbcconf.log
-a--- 2005/09/03 23:32 736 devicetable.log
-ar-- 2004/12/26 16:35 8419 CLDMA.LOG
da--- 2005/10/08 22:33 WINNT
d---- 2005/09/18 5:54 TestDir
d---- 2004/02/28 2:33 マイ ダウンロード
da--- 2004/02/22 17:37 WUTemp
d---- 2004/03/23 0:26 temp
d---- 2005/09/30 2:06 Inetpub
da--- 2005/08/18 0:45 Documents and Settings
dar-- 2005/10/12 22:23 Program Files
d---- 2004/02/22 22:22 j2sdk1.4.1_06
Cmdletヘルプには載っていませんが、MSDNを見ると、
Sort-Objectは、複数の「ソートキー」を配列で渡すことができるようです。
拡張子で降順ソート、ファイルサイズで昇順ソート
MSH C:\..\Orca> get-childitem |
>> sort-object @{ e = { $_.extension }; asc = $false },
>> @{ e = { $_.length }; asc = $true }
>>
Directory: FileSystem::C:\Program Files\Orca
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2005/03/24 18:07 304128 Orca.exe
-a--- 2005/03/24 18:07 48640 orca.dat
-a--- 2005/03/24 19:48 342528 logo.cub
-a--- 2005/03/24 19:48 442368 mergemod.cub
-a--- 2005/03/24 19:48 629248 XPlogo.cub
-a--- 2005/03/24 19:48 647168 darice.cub
-a--- 2005/03/24 18:07 604652 orca.chm