見出し画像

【PAD】フォルダを検索して複製

自動化を頼まれたやつが出来たのでメモです。

できること
・事前に指定したフォルダ内のフォルダ名を検索
 (サブフォルダ可、入力は毎回受け付ける)
・検索結果のフォルダを一つにまとめてデスクトップに保存

まずPowerAutomateDesktopとは

ここが公式サイトです。

ざっくり言うと、MicroSoft(Windowsの会社)から出ている自動化のためのソフトです。
PowerShellとかコマンドプロンプトとか、その辺りのプログラム系より簡単に作れるので、初心者にオススメです。玄人の人でも、他言語を混ぜて使うことが出来るので、無駄にはならないです。

実際、コマンドプロンプトで作ろうとして無理だったので、これに移行して作りました。コマンド言語全然わからん。

フローの中身

フローとは

アクション(動作)の塊です。自動化のメイン。上から順に処理していきます。

長くなるなら「サブフロー」に分けることがオススメです。今回は使いませんが。

今回の中身

**REGION 設定
/# 検索先のフォルダアドレスの記入場所です。
フルパスでお願いします。#/
SET search_file TO ``
**REGION 保存先フォルダの作成
/# デスクトップに保存するために、デスクトップのアドレスを取得しています。
おそらく大丈夫だと思いますが、念のため確認だけお願いします。#/
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> SpecialFolderPath
# この下でフォルダ名を「MMDD_商品名」にする設定をしています。
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateOnly CurrentDateTime=> CurrentDateTime
IF CurrentDateTime.Month < 10 THEN
    SET month TO $'''0%CurrentDateTime.Month%'''
ELSE
    SET Month TO CurrentDateTime.Month
END
IF CurrentDateTime.Day < 10 THEN
    SET Day TO $'''0%CurrentDateTime.Day%'''
ELSE
    SET Day TO CurrentDateTime.Day
END
Folder.Create FolderPath: SpecialFolderPath FolderName: $'''%Month%%Day%_%UserInput%''' Folder=> NewFolder
**ENDREGION
**ENDREGION
Display.InputDialog Message: $'''検索する対象の名前を入力してください''' InputType: Display.InputType.SingleLine IsTopMost: False UserInput=> UserInput
/# フォルダ名を検索しています。
検索対象名の前後に「*」が入っているのは、前後に文字が入っている場合でも検索対象とするためです。不要な場合は消してください。
また、検索対象がファイルの場合、「フォルダー内のファイルを取得」アクションで同じ設定をしてください。ファイルフィルターのみ、最後に「.*」(検索対象ファイルの拡張子設定)の追加をお願いします。#/
Folder.GetSubfolders Folder: search_file FolderFilter: $'''*%UserInput%*''' IncludeSubfolders: True FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Subfolders=> Folders
# 検索対象をファイルにしている場合、変数名が変わるので、「For each」の「Folders」を「Files」に変更してください。
LOOP FOREACH CurrentItem IN Folders
    # リストにフォルダパスが入っているので、そのフォルダをコピペする作業です。
    Folder.Copy Folder: CurrentItem Destination: NewFolder IfFolderExists: Folder.IfExists.DoNothing CopiedFolder=> CopiedFolder
END

新しいフローを用意して、これをコピペすると使えます。一番上の「変数を設定」で検索先フォルダの設定だけお願いします。

貼り付けるとこうなるはずです。

赤枠のところに「検索先フォルダのパス」を書きこんでください。

解説

そんなに中身はないんですけどね。

流れとしては、「検索先フォルダの設定」→「コピー先フォルダの設定」→「検索する名前を訊く」→「検索」→「コピー」です。

  1. 検索先フォルダの設定
    ここ、本当は変数にする必要はないんですが、人に渡すものなので設定しやすい方がいいかな、と思って作りました。
    削除する場合、下の方の「フォルダー内のサブフォルダーを取得」の「フォルダー」に直接入力してください。

  2. コピー先フォルダの設定
    デスクトップの場所を取得した後、今日の日付から「MMDD_検索名」のフォルダを作っています。

  3. 検索する名前を訊く
    メッセージボックスで名前を検索名を訊いて、のちの検索に使用します。入力を一行だけにして、ファイル名に対応するようにしています。

  4. 検索
    正確には、検索内容にあうフォルダをリストにしています。
    ここでサブフォルダも含めて取得していて、リストの中身はフルパスで載っています。これを後のフォルダコピーに使用しています。
    フォルダフィルターに「*%UserInput%*」が入っていますが、これは検索文字の前後に文字があっても、検索対象に含める設定です。不要なら「*」を削除してください。

    また、検索対象がフォルダではなくファイルの場合、アクションを「フォルダー内のファイルを取得」に変更して、ファイルフィルターを「*%UserInput%*.*」に設定してください。「.*」は拡張子を問わないことを示します。

  5. コピー
    上記のリストを繰り返し使用して、1で作ったフォルダにコピペするアクションです。


おわり

結構な量があっても三分くらいで出来るみたいなので、かなり簡略化ができます。

作るのが結構楽しかったので、これからも書くかもしれないです。その時はよろしくお願いします。

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