#author("2017-02-06T12:46:56+09:00","","")
#author("2017-02-07T09:27:32+09:00","","")
#navi(../)
* PowerShellでファイルサイズを指定しファイルを検索する方法 [#l6ff1844]
UNIXコマンドのfindのように、指定したファイルサイズ以上のファイル一覧を取得したりする方法を以下に記します。

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)


* 関連記事 [#l10eade5]
-[[PowerShellでファイルサイズを取得する>PowerShell/ファイルサイズを取得する]]
-[[数値の比較を行う比較演算子の一覧>PowerShell/数値の比較を行う比較演算子の一覧]]

* Where-Objectにより指定したファイルサイズ以上を判定する [#j1ee1c31]
Get-ChildItemの出力に対し、Where-Objectを使用することにより、簡単に一覧を取得することができます。~
サンプルを記す前に、比較演算子を以下に記します。
|-eq|等しいかをチェック 数値 = 数値|''eq''ual|
|-ne|異なるかをチェック 数値 ≠ 数値|''n''ot ''e''qual|
|-lt|数値 < 数値をチェック|''l''ess ''t''han|
|-le|数値 ≦ 数値をチェック|''l''ess than or ''e''qual|
|-gt|数値 > 数値をチェック|''g''reater ''t''han|
|-ge|数値 ≧ 数値をチェック|''g''reater than or ''e''qual|

以下の例は比較演算子-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

* 以上・以下で検査うする場合 [#r1041746]
* 以上・以下で検索する場合 [#r1041746]
以下の例は、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


* ファイル名のフルパスを取得したい場合 [#tb0cb67e]
上記の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出力をしたい場合 [#rb2092ff]
ファイル名、日付、サイズで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"

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

#htmlinsertpcsp(win-btm.html,win-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS