このエントリーをはてなブックマークに追加


PowerShellでファイルサイズを指定しファイルを検索する方法

UNIXコマンドのfindのように、指定したファイルサイズ以上のファイル一覧を取得したりする方法を以下に記します。


関連記事

Where-Objectにより指定したファイルサイズ以上を判定する

Get-ChildItemの出力に対し、Where-Objectを使用することにより、簡単に一覧を取得することができます。
サンプルを記す前に、比較演算子を以下に記します。

-eq等しいかをチェック 数値 = 数値equal
-ne異なるかをチェック 数値 ≠ 数値not equal
-lt数値 < 数値をチェックless than
-le数値 ≦ 数値をチェックless than or equal
-gt数値 > 数値をチェックgreater than
-ge数値 ≧ 数値をチェックgreater than or equal

以下の例は比較演算子-ge(数値 ≧ 数値)を使った例です。

  • Recurseを使ってサブディレクトリも対象にしています。
    Get-ChildItem -Path <path/to> -Recurse | Where-Object {$_.Length -ge <ファイルサイズ> }

実際に100Mの場合は以下のように記述します。

PS C:\> Get-ChildItem -Path C:\Windows\System32 | Where-Object {$_.Length -ge (1024*100000)}


    Directory: C:\Windows\System32


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2016/04/13     13:39      135176864 MRT.exe

100Mと記述することもできます。

PS C:\> Get-ChildItem -Path C:\Windows\System32 | Where-Object {$_.Length -ge 100MB}


    Directory: C:\Windows\System32


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2016/04/13     13:39      135176864 MRT.exe

以上・以下で検索する場合

以下の例は、15MB以上、20MB以下を対象にしています。

PS C:\> Get-ChildItem -Path C:\Windows\System32 | Where-Object {$_.Length -ge 15MB -And $_.Length -le 20MB}


    Directory: C:\Windows\System32


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2015/08/09      4:52       17973744 igd11dxva64.dll
-a----       2015/08/09      4:50       15989760 igdfcl64.dll
-a---l       2009/07/14     10:28       20268032 imageres.dll

ファイル名のフルパスを取得したい場合

上記の15MB以上、20MB以下のフルパスを取得したい場合は以下のようにします。

PS C:\> (Get-ChildItem -Path C:\Windows\System32 | Where-Object {$_.Length -ge 15MB -And $_.Length -le 20MB}).FullName
C:\Windows\System32\igd11dxva64.dll
C:\Windows\System32\igdfcl64.dll
C:\Windows\System32\imageres.dll

CSV出力をしたい場合

ファイル名、日付、サイズでCSV出力した場合は以下のようにします。

PS C:\> Get-ChildItem -Path C:\Windows\System32 | Where-Object {$_.Length -ge 15MB -And $_.Length -le 20MB} | Select-Object Fullname, Length, LastWriteTime | Export-Csv -Encoding Default out.csv

出力されたcsvを確認してみます。

PS C:\> Get-Content .\out.csv
#TYPE Selected.System.IO.FileInfo
"FullName","Length","LastWriteTime"
"C:\Windows\System32\igd11dxva64.dll","17973744","2015/08/09 4:52:02"
"C:\Windows\System32\igdfcl64.dll","15989760","2015/08/09 4:50:44"
"C:\Windows\System32\imageres.dll","20268032","2009/07/14 10:28:10"

#TYPEが邪魔なので、出力しない場合は以下のようにします。

PS C:\> Get-ChildItem -Path C:\Windows\System32 | Where-Object {$_.Length -ge 15MB -And $_.Length -le 20MB} | Select-Object Fullname, Length, LastWriteTime | Export-Csv -Encoding Default -NoTypeInformation out.csv
PS C:\> Get-Content .\out.csv
"FullName","Length","LastWriteTime"
"C:\Windows\System32\igd11dxva64.dll","17973744","2015/08/09 4:52:02"
"C:\Windows\System32\igdfcl64.dll","15989760","2015/08/09 4:50:44"
"C:\Windows\System32\imageres.dll","20268032","2009/07/14 10:28:10"

以上、ファイルサイズを指定し該当するファイル一覧を取得する方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-02-07 (火) 09:27:32