\ ポイント最大11倍! /

PADで複数のキーワードのいずれかを含むファイルを検索する方法(OR検索)

【当サイトはプロモーションを含んでいます】

この記事でわかること!

  • Power Automate for desktopで、複数キーワードでファイルやフォルダをOR検索する方法がわかる。
目次

ファイルを複数キーワードでOR検索したい。(論理和)

「テキストの解析」アクションを使ってOR検索を実現する。

じょじお

フォルダー内のファイルを取得」アクションでは複雑な条件でファイル検索ができません。

ぽこがみさま

複雑な条件のファイル検索の方法として、下記の記事では「テキストの解析」アクションと組み合わせてファイルをAND検索する例を紹介しました。

じょじお

今回は前回の記事の続きとして、複数キーワードの中のいずれかにマッチするファイルの抽出を行う例を紹介します。

テキストの解析」アクションとは、文字列あるいはリストの中から特定の文字列を抽出したり、文字列の位置を特定するアクションです。

「テキストの解析」アクションは、正規表現に対応しているので複雑な文字列抽出を柔軟に行うことができます。

正規表現とは?

正規表現は、多くのプログラム言語の中で広く採用されている文字列のパターンの表現方法です。正規表現を用いることで文章の中から目的のキーワードを柔軟に抽出することができます。

今回は、正規表現を使ってファイルパスのリストの中から目的のファイルパスのみを抽出します。

正規表現を0から習得するには?

正規表現を0から学ぶにはUdemy動画講座がオススメです。Udemyの正規表現をテーマにした動画講座は3つ受講しましたが、その中でも下記の講座が一番わかりやすかったです。

正規表現入門 作業効率アップに役立つ38個の方法

購入される場合は、Udemyは頻繁にセールを開催しますので講座をお気に入りに登録しておき、セール時に購入することをオススメします。

セール開催中かを確認する!

フローの作成方法

今回のゴールの確認

じょじお

今回のゴールを確認します。
下記のような12個のファイルが格納されたテストフォルダを用意しました。

ぽこがみさま

この中から特定の条件にマッチするファイルだけを開き、ファイルの中身を読み取ります。

C:\Users\user\Desktop\test\これは山田と鈴木のファイル.xlsx
C:\Users\user\Desktop\test\これは山田と鈴木のファイルです.txt
C:\Users\user\Desktop\test\山田と鈴木と佐藤のファイル.txt
C:\Users\user\Desktop\test\山田と鈴木のファイル.txt
C:\Users\user\Desktop\test\山田のファイル.txt
C:\Users\user\Desktop\test\山田山田鈴木鈴木のファイル.txt
C:\Users\user\Desktop\test\山田鈴木.txt
C:\Users\user\Desktop\test\田中のファイル.txt
C:\Users\user\Desktop\test\田中鈴木佐藤.txt
C:\Users\user\Desktop\test\田中鈴木加藤山田佐藤.txt
C:\Users\user\Desktop\test\鈴木と山田のファイル1969.txt
C:\Users\user\Desktop\test\鈴木のファイル.txt
じょじお

下記がフィルタ条件です。

今回設定したフィルタ条件

  • 下記の条件いずれかにマッチするテキストファイル(拡張子が.txt)を抽出する。
    • ファイル名に「山田」というキーワードを含む
    • ファイル名に「鈴木」というキーワードを含む
じょじお

下記がファイルの中身です。ファイルの中身にはそのファイルのファイル名が記述されています。

テキストファイルの内容

フローの作成

じょじお

PADを起動してフローを作ります。

STEP
Power Automate for desktopを起動して新規フローを作成します。
STEP
「フォルダー内のファイルを取得」アクションを追加します。

▲「フォルダー内のファイルを取得」アクションを追加してパラメータを入力します。

パラメータ

  • フォルダー:C:\Users\user\Desktop\test
  • ファイルフィルター:*

その他の設定はデフォルト値のままにしました。ファイルフィルターに「*(アスタリスク)」を入力することで一旦testフォルダ内のすべてのファイルを取得します。

STEP
フローを実行してFiles変数を確認します。

一旦フローを実行して動作を確認します。フローデザイナー上部の実行ボタンをクリックしてフローを実行しましょう。

▲フローを実行したら結果を確認してみます。「フォルダー内のファイルを取得」アクションの実行結果は「Files変数」に格納されます(名前を変更していなければ)。フローデザイナー画面の右側のフロー変数の中のFiles変数をダブルクリックして、Files変数の中身を確認してみます。

▲Files変数の中身です。testフォルダの中身のファイル12個のファイルパス一覧が取得できました。問題なさそうなので次に進みます。

STEP
「テキストの解析」アクションを追加します。

▲「テキストの解析」アクションを追加してパラメータを入力します。

パラメータ

  • 解析するテキスト:%Files%
  • 検索するテキスト:別記
  • 正規表現である:オン
  • 最初の出現箇所のみ:オフ

正規表現を使うので「正規表現である」はオンにします。

最初の出現箇所のみ」は、オンにすると最初にマッチしたひとつのファイルパスのみが取得されます。今回は条件に合致しそうなファイルが複数あるためオフにします。

「検索するテキスト」に入力した正規表現

検索するテキスト」のパラメータには下記の正規表現を入力しました。

.*(鈴木|山田).*\.txt

OR検索するときはパイプラインでキーワードを区切ります。詳しい正規表現の解説は長くなるので省略します。

¥マークは環境によってバックスラッシュに見えますが、どちらでも同じ役割をしますので気にせず大丈夫です。

正規表現のおすすめの学習教材はこちら

STEP
フローを実行してMatches変数を確認します。

▲フローを実行したら結果を確認してみます。「テキストの解析」アクションの実行結果は「Matches変数」に格納されます(名前を変更していなければ)。フローデザイナー画面の右側のフロー変数の中のMatches変数をダブルクリックして、Matches変数の中身を確認してみます。

C:\Users\user\Desktop\test\これは山田と鈴木のファイルです.txt
C:\Users\user\Desktop\test\山田と鈴木と佐藤のファイル.txt
C:\Users\user\Desktop\test\山田と鈴木のファイル.txt
C:\Users\user\Desktop\test\山田のファイル.txt
C:\Users\user\Desktop\test\山田山田鈴木鈴木のファイル.txt
C:\Users\user\Desktop\test\山田鈴木.txt
C:\Users\user\Desktop\test\田中鈴木佐藤.txt
C:\Users\user\Desktop\test\田中鈴木加藤山田佐藤.txt
C:\Users\user\Desktop\test\鈴木と山田のファイル1969.txt
C:\Users\user\Desktop\test\鈴木のファイル.txt

▲Matches変数の中身です。「山田」と「鈴木」のいずれかをファイル名に含むテキストファイルが抽出されたはずです。山田と鈴木がファイル名に含まれるけどエクセルファイルの場合はマッチしていないことがわかります。問題なさそうなので次に進みます。

STEP
「For each」アクションを追加します。

「For each」アクションを追加してパラメータを入力します。

パラメータ

  • 反復処理を行う値:%Matches%
STEP
(ループの中の処理)「ファイルからテキストを読み取ります」アクションを追加します。

パラメータ

  • ファイルパス:%CurrentItem%
  • 内容の保存方法:単一のテキスト値
  • エンコード:UTF-8

%CurrentItem%はFor eachに渡した%Matches%変数の中身のファイルパスが、ループが1回ずつ回るごとに一個ずつ入ってきます。

STEP
(ループの中の処理)「メッセージを表示」アクションを追加します。

パラメータ

  • 表示するメッセージ:%FileContents%

%FileContents%アクションは「ファイルからテキストを読み取ります」アクションの出力です。

STEP
フローが完成しました。

▲フローが完成しました。

STEP
フローを実行します。

フローが完成したのでフローを実行します。

▲フローを実行すると、条件にマッチしたファイルの内容が1件ずつポップアップ表示されました。

Robinソースコード

Folder.GetFiles Folder: $'''C:\\Users\\user\\Desktop\\test''' FileFilter: $'''*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
Text.ParseText.RegexParse Text: Files TextToFind: $'''.*(鈴木|山田).*\\.txt''' StartingPosition: 0 IgnoreCase: False OccurrencePositions=> Positions Matches=> Matches
LOOP FOREACH CurrentItem IN Matches
    File.ReadTextFromFile.ReadText File: CurrentItem Encoding: File.TextFileEncoding.UTF8 Content=> FileContents
    Display.ShowMessageDialog.ShowMessage Message: FileContents Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
END

# [ControlRepository][PowerAutomateDesktop]

{
  "ControlRepositorySymbols": [],
  "ImageRepositorySymbol": {
    "Name": "imgrepo",
    "ImportMetadata": {},
    "Repository": "{\r\n  \"Folders\": [],\r\n  \"Images\": [],\r\n  \"Version\": 1\r\n}"
  }
}

▲今回作成したフローのRobinソースコードです。フローデザイナーにコピペすることで今回作成したフローを自分の環境に再現することができます。

関連記事

まとめ

じょじお

「テキストの解析」アクションを使って複数キーワードでファイルをAND検索する方法を紹介しました。

ぽこがみさま

このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!

セール開催中かを確認する!

お役に立てたらシェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!
目次