見出し画像

【PowerShell】どう書くんだっけ?『条件付きでファイルを検索する』

どうも lingmu です。
今回は PowerShell でファイルを検索する方法について書きます。あるフォルダから条件付きでファイルを探したい場合などに効果的です。

1. やりたいこと

 今回は、『以下2つの条件に合致するファイルを検索する』ことを実現したいことと仮定します。
<条件>
 (1)ファイル名に「出力結果」の文字列が含まれる
 (2)ファイルサイズが 1Kb を超える

2. どう書くんだっけ?

# ------------------------------------------------------------------------------
# 【機能】:ファイル検索
#
# 【概要】:ファイル名に「出力結果」の文字列が含まれるかつファイルサイズが 1Kb を
#      超えるテキストファイルを検索する
#
# 【検索条件】:
# ・検索条件(1):ファイル名に「出力結果」の文字列が含まれる
# ・検索条件(2):ファイルサイズが 1Kb を超える
#
# 【備考】:
# ・検索対象パス:C:\work ※サブフォルダも含める
# ・検索対象ファイル:*.txt
# ------------------------------------------------------------------------------
(Get-ChildItem -Path C:\work\*.txt -Recurse |
   Where-Object {
       ($_.Name -like "*出力結果*") -and ($_.Length -gt 1000)
   }
).Name

 2.1 解説

 実装内容について簡単に解説を書きます。

 (1) Get-ChildItem -Path C:\work\*.txt -Recurse で C:\work ディレクトリ配下(サブディレクトリを含む)のテキストファイル(*.txt)を取得します

 (2)Where-Object {($_.Name -like "*出力結果*") -and ($_.Length -gt 1000)} でファイル名に「出力結果」が含まれるかつファイルサイズが 1000バイト(1Kb)のファイルを選択抽出します。
 ※$_はパイプラインで受け取ったオブジェクトが格納された特殊な変数(自動変数)を意味しており、(1)で取得したテキストファイル(*.txt)の結果が順次格納されます。

 (3)最後に(1)と(2)をカッコで囲み .Name を付けることで条件に合致したファイル名を表示することができます。

3. 動作を確認する

PS C:\> (Get-ChildItem -Path C:\work\*.txt -Recurse |
>>     Where-Object {
>>         ($_.Name -like "*出力結果*") -and ($_.Length -gt 1000)
>>     }
>> ).Name
1-4_出力結果.txt
出力結果1-4.txt

4. 参考サイト

■Get-ChildItem - PowerShell - Microsoft Docs
 https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7.2

■Where-Object (Microsoft.PowerShell.Core)
 https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/where-object?view=powershell-7.2

おわり

 以上です。


この記事が気に入ったらサポートをしてみませんか?