オブジェクト配列をソートする
オブジェクト配列のソートには「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