ダウンロードフォルダに、写真も PDF も Excel もごちゃまぜに溜まっていく。拡張子ごとにフォルダへ分けるだけなら、Python なら20行ほどで書けます(Pythonでファイル・写真を自動整理する方法)。
では、プログラムを書かずに、Windows で無料で使える Power Automate(Power Automate Desktop・PAD)で同じことはできるのか。同じルール・同じ試し用のファイル100件と1000件で、PAD と Python の両方を実際に動かして比べました。組むときにつまずいた所も、出た画面のとおりに書きます。
できる:PAD でも、1000件すべてを決めたフォルダに振り分けられました。
時間は大きく違う:1000件で、PAD は約13分(796秒)、Python は0.66秒でした。
同じ名前のファイルがあると、壊れ方が逆になる:Python(記事のコード)は前からあったファイルを黙って上書きして消しました。PAD(初期の設定)は何も消さず、新しいほうを黙って元の場所に残しました。どちらも、何も知らせません。
大文字の .JPG に注意:PAD の Case は大文字と小文字を区別するので、そのままだと .JPG が「その他」に入ります。小文字にしてから比べるアクションを1つ足せば直ります。
やらせる仕事:Python の記事と同じルール
フォルダ C:\pad_shiken\受け取り に入っているファイルを、拡張子ごとに、その中のフォルダへ移します。ルールは Python の記事と同じです。
| 拡張子 | 移す先のフォルダ |
|---|---|
| .jpg .jpeg .png | 画像 |
| .docx .doc | Word |
| .xlsx .xls | Excel |
| .zip | 圧縮ファイル |
| それ以外(拡張子なしも) | その他 |
試し用のファイルは、中身が数バイトの文字だけのダミーを Python で作りました。100件の中に、つまずきそうなものをわざと混ぜてあります。
- 大文字の
.JPG(6件) - 拡張子の無いファイル、
.tar.gzのように点が2つあるファイル 資料 (1)_0043.JPGのような、空白とかっこ入りの名前
「できた」の基準は、動かす前に決めました。全部のファイルが決めたフォルダに入り、元のフォルダに1件も残っていないこと。数えるのも Python の小さな道具でやっています(目で数えると見落とすので)。
PAD で組む
できあがったフローの上のほうは、こうなります。全部で28アクションです。

1. フォルダー内のファイルを取得
左の「アクション」の「フォルダー」から「フォルダー内のファイルを取得」をドラッグし、フォルダーに C:\pad_shiken\受け取り を入れます。ファイル フィルターは * のまま。取れたファイルの一覧は、変数 Files に入ります。
2. For each で1件ずつ繰り返す
「ループ」から「For each」をドラッグし、反復処理を行う値に %Files% を入れます。% で囲むのを忘れないでください(忘れるとどうなるかは後で書きます)。1件ずつ CurrentItem に入って回ります。
3. 拡張子を小文字にする
「テキスト」から「テキストの文字の大きさを変更」を、For each のすぐ下にドラッグします。

%CurrentItem.Extension%(拡張子)、変換先は「小文字」。結果は TextWithNewCase に入ります。これを入れないと、大文字の .JPG が「画像」に行きません(後で、入れなかったときの結果を書きます)。なお、アクションの検索欄に「小文字」と入れても、このアクションは出てきませんでした。名前に「小文字」が入っていないためです。
4. Switch と Case で、移す先のフォルダ名を決める
「条件」から「Switch」をドラッグし、チェックする値に %TextWithNewCase% を入れます。その中に「Case」を、拡張子の数だけ並べます。

.jpg。点も付けます。それぞれの Case のすぐ下に「変数」の「変数の設定」を置き、変数 FolderName にフォルダ名(画像・PDF など)を入れます。最後に「Default case」を置き、その中で FolderName を「その他」にします。Default case には設定する項目がありません(開くと「このアクションは入力パラメーターを受け取らず…」と出ます)。

5. フォルダーの作成と、ファイルの移動
Switch の End の下(For each の End の上)に、2つ置きます。
| アクション | 入れるもの |
|---|---|
| フォルダー → フォルダーの作成 | 作成先 C:\pad_shiken\受け取り/新しいフォルダー名 %FolderName% |
| ファイル → ファイルの移動 | 移動するファイル %CurrentItem%/宛先フォルダー C:\pad_shiken\受け取り\%FolderName%/ファイルが存在する場合 何もしない(初期のまま) |
フォルダーがもうあっても、「フォルダーの作成」は止まりませんでした(1件ごとに毎回作ろうとしますが、そのまま進みます)。
コピーして使えるフロー
PAD のフローは、文字にしてコピーできます。デザイナーでフローの行をクリックし、Ctrl+A → Ctrl+C を押すと、次のような文字になります(この記事で動かしたフローそのものです)。
Folder.GetFiles Folder: $'''C:\\pad_shiken\\受け取り''' 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
LOOP FOREACH CurrentItem IN Files
Text.ChangeCase Text: CurrentItem.Extension NewCase: Text.CaseOption.LowerCase Result=> TextWithNewCase
SWITCH TextWithNewCase
CASE = $'''.jpg'''
SET FolderName TO $'''画像'''
CASE = $'''.jpeg'''
SET FolderName TO $'''画像'''
CASE = $'''.png'''
SET FolderName TO $'''画像'''
CASE = $'''.pdf'''
SET FolderName TO $'''PDF'''
CASE = $'''.docx'''
SET FolderName TO $'''Word'''
CASE = $'''.doc'''
SET FolderName TO $'''Word'''
CASE = $'''.xlsx'''
SET FolderName TO $'''Excel'''
CASE = $'''.xls'''
SET FolderName TO $'''Excel'''
CASE = $'''.zip'''
SET FolderName TO $'''圧縮ファイル'''
DEFAULT
SET FolderName TO $'''その他'''
END
Folder.Create FolderPath: $'''C:\\pad_shiken\\受け取り''' FolderName: FolderName Folder=> NewFolder
File.Move Files: CurrentItem Destination: $'''C:\\pad_shiken\\受け取り\\%FolderName%''' IfFileExists: File.IfExists.DoNothing MovedFiles=> MovedFiles
END
使うときは、新しいフローを作ってデザイナーの空いた所をクリックし、Ctrl+V で貼り付けます。C:\\pad_shiken\\受け取り の所(3か所)を、自分の整理したいフォルダに書き換えてください。文字の中では \ が \\ と2つ重なって書かれます。
まずは、コピーしたファイルを入れた試し用のフォルダで動かしてください。移動したファイルは、元に戻すのも手作業です。
組むときに、実際につまずいた所
このフローは、手順を見ながら画面で一から組みました。そのとき実際に起きたことです。
Switch が For each の外に入った
Switch をドラッグして落としたら、For each の中ではなく、For each の End の下に置かれました。これだと繰り返しの外なので、最後に1回しか動きません。「For each」の行と、その End の行のあいだに落とすと、中に入ります。中に入ると、一段右に下がって表示されます。
%Files% の % を忘れて、式のエラー
For each の値に Files と、% 無しで入れたところ、下にエラーが出ました。

in 'Files' と引用符つきになっています。変数ではなく、「Files」という文字として読まれています。%Files% に直すと消えました。右上の {x} から変数を選ぶと、% は自動で付きます。
フォルダ名のうしろに、改行が入った
「変数の設定」の値を入れたあとに Enter を押すと、値のうしろに改行が入ります。見た目では分かりにくいのですが、デザイナーの表示で見分けられます。

'PDF のあとで折れて、次の行に ' を割り当てる が出ています。これが改行の入っている印です。このままだと、フォルダ名のうしろに改行が混ざります。値を開いて、うしろの改行を消しておきます(改行が入ったまま動かすとどうなるかは、試していません)。
パスのつなぎ目の \ が抜けて、実行時のエラー
実行したら、1件目のファイルの移動で止まりました。

宛先フォルダーに C:\pad_shiken\受け取り%FolderName% と、受け取り のうしろの \ を入れ忘れていました。C:\pad_shiken\受け取り\%FolderName% に直すと、最後まで動きました。保存の時点ではエラーにならず、動かして初めて止まるので気づきにくい所です。
「小文字」で検索しても、アクションが出てこない
拡張子を小文字にするアクションを探そうと、検索欄に「小文字」と入れても、何も出てきませんでした。名前が「テキストの文字の大きさを変更」だからです。「テキスト」のグループを開くと並んでいます。

大文字の .JPG が「その他」に入った
はじめは、手順3の「テキストの文字の大きさを変更」を入れずに、拡張子をそのまま Switch で比べていました。そのときの結果です。
| フロー | 正しい場所 | 違う場所 | 元のフォルダに残った |
|---|---|---|---|
| 拡張子をそのまま比べる | 94 | 6 | 0 |
| 小文字にしてから比べる | 100 | 0 | 0 |
違う場所に入った6件は、全部が大文字の .JPG で、「その他」に入っていました。PAD の Case の「と等しい (=)」は、大文字と小文字を別のものとして比べるためです。スマホやデジカメの写真は .JPG と大文字のことがあるので、実際のダウンロードフォルダでも起きます。
Python の記事のコードは、比べる前に .lower() で小文字にしているので、最初から「画像」に入ります。
同じ名前のファイルがあったとき
移す先のフォルダに、同じ名前のファイルがもうある場合も試しました。「画像」「PDF」「その他」の3つのフォルダに、移ってくるのと同じ名前のファイルを1件ずつ先に置いてから、100件を振り分けます。先に置いたファイルの中身は「前からあった同じ名前のファイル」という文字にしておき、あとで残っているかを確かめます。
| 前からあったファイル(3件) | 新しく来た同じ名前のファイル(3件) | 画面の知らせ | |
|---|---|---|---|
| Python(記事のコード) | 上書きされて、消えた | 移された | 無し |
| PAD(ファイルが存在する場合=何もしない) | そのまま残った | 移されず、元のフォルダに残った | 無し |
どちらも何も知らせずに終わりました。違うのは、消えるか、残るかです。
PAD のほうは、元のフォルダに3件残るので、あとで見れば「何か残っている」と気づけます。Python のほうは、元のフォルダは空になり、件数もそろっているので、上書きで消えたことに気づく手がかりがありません。Python の記事の「よくある質問」にも「shutil.move は、移動先に同名ファイルがあると上書きしてしまいます」と書いてありますが、実際に動かすと、本当に一言も言わずに消えました。

PAD の「ファイルが存在する場合」で選べるのは、「何もしない」と「上書き」の2つだけです。「上書き」にすると、Python と同じように前のファイルが消える側になるはずです(この記事では「上書き」は試していません)。名前を変えて両方残す、という選択肢はありません。迷ったら初期の「何もしない」のままにしておき、元のフォルダに残ったファイルは手で見るのが安全です。重複したファイルそのものを探したいときは、Pythonで重複ファイル・重複写真を見つけて整理する方法も参考にしてください。
かかった時間
PAD はデザイナーの「実行」から動かし、ファイルが元のフォルダから減り始めてから、最後の1件が減るまでを、外から0.05秒ごとに数えて測りました(PAD を開く時間などは入っていません)。
| 件数 | 実行遅延 | 時間 | 1件あたり | |
|---|---|---|---|---|
| PAD | 100 | 50ミリ秒(初期のまま) | 98.47秒 | 0.98秒 |
| PAD | 1000 | 1ミリ秒(これ以上は下げられない) | 796.02秒(約13分) | 0.80秒 |
| Python(記事のコード) | 100 | — | 0.06秒 | — |
| Python(記事のコード) | 1000 | — | 0.66秒 | — |
「実行遅延」は、デザイナーのいちばん下にある、アクションとアクションのあいだの待ち時間です。0は受け付けず、1ミリ秒が下限でした。
最初は、この待ちが時間の大部分だろうと思っていました。ところが、50ミリ秒から1ミリ秒に下げても、1件あたりは0.98秒から0.80秒と、2割ほどしか縮みませんでした。時間の大部分は、待ちではなく、PAD がアクションを1つずつ動かすこと自体にかかっているようです。何にどれだけかかっているかまでは、分けて測っていません。
100件のときでも、実行中は「止まる気配がないな」と感じるくらい長く、1000件では13分ほど動きっぱなしでした。毎日数十件のダウンロードを片づけるくらいなら気になりませんが、何千件もの写真を一度に分けるなら、Python のほうが向いています。
Python 版と並べて
| PAD | Python(記事のコード) | |
|---|---|---|
| 作るもの | 28アクション(ドラッグと入力) | 17行 |
| 1000件の時間 | 約13分 | 0.66秒 |
| 大文字の .JPG | そのままだと「その他」へ(1アクション足して直る) | 最初から「画像」へ |
| 同じ名前のファイル | 前のを残し、新しいほうを元に残す | 前のを上書きして消す |
| どちらも同じ所 | 同じ名前のときも、何も知らせずに終わる | |
速さは Python が大きく上回りました。一方で、同じ名前のファイルの扱いは、PAD の初期の設定のほうが「消さない」側に倒れていました。どちらを選ぶにしても、動かしたあとに元のフォルダに何か残っていないか、一度は目で見るのがいちばん確かです。PAD と Python を別の仕事で比べたウェブページの更新チェックの記事や、PAD の Web 操作が止まる理由を調べたセレクターの記事もあわせてどうぞ。
確かめていないこと
- 使っている最中のファイル(開いている Excel など)があるときの動きは試していません。
- 毎日決まった時間に自動で動かす方法(無料版でできるか)は、この記事では試していません。
- サブフォルダの中のファイル、ネットワーク上のフォルダ(NAS など)では試していません。
- PAD の時間が何にかかっているか(ファイルの移動か、アクションの切り替えか)は分けて測っていません。
- 試したファイルは中身が数バイトのダミーです。大きなファイルでは時間が変わるかもしれません。
検証した環境:Windows 11 / Power Automate(無料版)11.2609 / Python 3.14。試し用のファイルは Python で作ったダミーで、同じ並びのものを PAD と Python の両方で振り分けました(2026年10月13日)。


コメント