\ 楽天BLACK FRIDAYセール! /

PADで複数のキーワードのすべてを含むファイルを検索する方法(AND検索)

この記事でわかること!

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

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

「フォルダー内のファイルを取得」アクションではAND検索でファイル抽出ができない。

じょじお

Power Automate for desktopでファイルを検索・抽出する時に使う「フォルダー内のファイルを取得」アクションは、ワイルドカードを使ってファイルをあいまい検索することができます。

ぽこがみさま

しかし、ワイルドカード以外の正規表現に対応していないようなので複雑なパターンでファイルを抽出するには工夫が必要なようです。

フォルダー内のファイルを取得」アクションとは?

フォルダー内のファイルを取得」アクションは特定のフォルダの中のファイルパスを取得するアクションです。

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

じょじお

先ほど紹介したように「フォルダー内のファイルを取得」アクションではAND検索ができません。

ぽこがみさま

そこで「テキストの解析」アクションと組み合わせて複数キーワードのすべてをファイル名に含むファイルを検索する方法について紹介します。(AND検索)

じょじお

フォルダー内のファイルを取得」アクションでざっくりとファイルパスを抽出した後に、「テキストの解析」アクションで詳細な絞り込みを行い目的のファイルを取得します。

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

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

正規表現とは?

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

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

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

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

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

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

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

フローの作成方法

今回のゴールの確認

じょじお

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

ぽこがみさま

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

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\鈴木と山田のファイル1969.txt
C:\Users\user\Desktop\test\鈴木のファイル.txt
じょじお

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

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

  • 下記の条件すべてにマッチすること!(AND検索)
    • ファイル名に「山田」というキーワードを含む
    • ファイル名に「鈴木」というキーワードを含む
    • テキストファイルである。(拡張子が.txt)
じょじお

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

Power Automate for desktop
テキストファイルの内容

フローの作成

じょじお

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

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

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

パラメータ

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

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

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

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

Power Automate for desktop

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

Power Automate for desktop

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

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

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

パラメータ

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

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

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

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

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

.*(?=.*鈴木)(?=.*山田).*\.txt

正規表現の解説は長くなるので省略します。上の例では正規表現でAND検索を表現する方法として肯定先読みという方法を使っています。気になる方は「正規表現 肯定先読み」でググってみてください。ただ、正規表現の知識がない方がいきなり肯定先読みの記事を読んでも訳がわからないかと思いますので、先に正規表現の基本知識をざっくりとでも頭に入れて、実際に手を動かして正規表現を書いてマッチングさせてみた方が良いかなとは思います。正規表現の表記を練習する際はhttps://regex101.com/などのテストサイトが便利です。

(¥マークは環境によってバックスラッシュとして表示されますがどちらでも同じ役割をしますので気にせず大丈夫です。)

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

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

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

Power Automate for desktop
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

▲Matches変数の中身です。山田と鈴木をファイル名に含むテキストファイルが抽出されたはずです。

鈴木と山田の登場順序が入れ替わってもマッチしていますし、山田と鈴木がファイル名に含まれるけどエクセルファイルの場合はマッチしていないことがわかります。問題なさそうなので次に進みます。

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

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

パラメータ

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

パラメータ

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

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

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

パラメータ

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

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

STEP
フローが完成しました。
Power Automate for desktop

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

STEP
フローを実行します。

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

Power Automate for desktop

▲フローを実行すると、条件にマッチしたファイルの内容が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ソースコードです。フローデザイナーにコピペすることで今回作成したフローを自分の環境に再現することができます。

ファイルをOR検索するには?

複数キーワードのいずれかを含むOR検索をする方法は下記の記事で紹介しています。

関連記事

まとめ

じょじお

ファイルを複数キーワードでAND検索する方法を紹介しました。

ぽこがみさま

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

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

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