更新日時が30日前より古いファイルを移動する(まず対象を確認)
Power Automate for desktopで古いファイルだけを保管フォルダーへ移す手順。移動しない事前確認、30日前ちょうどの判定、同名ファイルや対象0件の扱いを表とフォルダー図で説明します。
画面上の名前は、表示言語やバージョンによって異なる場合があります。Desktopの例は、フロー作成時に「Power Fx を有効にする」をオフにした標準構文です。Power Fx対応フローでは式・変数参照・インデックスの書き方が異なります。このページでは変数を %変数名% と表記します。出力変数の名前を入力する欄では、前後の % は付けません。
実行前に確認
- 移動版は元フォルダーからファイルを取り除きます。初回はメッセージ表示だけで確認し、次にダミーファイルで試してください。実データの整理はバックアップと対象確認後に行います。
- 30日前の同時刻より前を判定します。前月や30日前の午前0時を基準にする例ではありません。PCの時刻・タイムゾーン、コピー後の更新日時を確認してください。
- 同名は上書きしません。宛先の未作成、使用中・権限不足、途中で消えたファイルなどでは失敗する場合があります。エラーを無視して続行せず、原因を確認します。自動復旧や一括ロールバックは含みません。
- 表と図は架空の期待値です。実際のPAD実行結果ではありません。
1使うアクション
- アクション 1現在の日時を取得します日時を1回だけ取得 → %Now%(日付のみは選ばない)
- アクション 2加算する日時%Now% に -30日 → %CutoffDate%
- アクション 3フォルダー内のファイルを取得
- アクション 4For each%Files% → %CurrentFile%
- アクション 5If更新日時が基準より前
- アクション 6ファイルの移動初回はこのアクションを置かず「メッセージを表示」で対象を確認。移動版は上書きしない
図で見る処理のイメージ
概念図例として実行時刻を2026/10/09 10:00:00、基準を2026/09/09 10:00:00とします。まず候補を表示し、確認後に移動版へ進みます。
どのファイルが、どこへ移る?
初回は表示だけ候補は old.txt と report.txt の2件。
この段階では、両フォルダーの中身は変わりません。
BEFORE 移動前
- old.txt基準より古い・移動先に同名なし移動
- boundary.txt基準日時と同じ
- recent.txt基準より新しい
- report.txt古いが、移動先に同名あり
- report.txtすでにあるファイル
移動版を実行old.txt だけ
Input → Archive
AFTER 移動後の期待値
- boundary.txt対象外なので残る
- recent.txt対象外なので残る
- report.txt同名を上書きせず、ここに残る
- old.txtInputから移動してきた移動
- report.txt既存のファイルのまま
古いファイル2件のうち、移動するのは1件report.txt はInputにもArchiveにも残ります。「何もしない」を選ぶため、既存ファイルを上書きしません。
移動版ではold.txtだけがInputからArchiveへ移動。境界・最近のファイルと同名report.txtはInputに残り、Archiveの既存report.txtは変わりません。
| ファイル | 最終更新日時 | 古いか | 移動版の期待値 |
|---|---|---|---|
| old.txt | 2026/09/09 09:59:59 | はい | Archiveへ移動 |
| boundary.txt | 2026/09/09 10:00:00 | いいえ | Inputに残る |
| recent.txt | 2026/09/09 10:00:01 | いいえ | Inputに残る |
| report.txt | 2026/09/01 10:00:00 | はい | Archiveに同名があるため移動しない |
日時は同一PCのタイムゾーンで比較する例です。表の条件一致と移動成功は別です。
設定と処理を説明する模式図です。実際の設定画面や実行結果のスクリーンショットではありません。
2実際の設定内容
入力する値・操作手順を確認する9ステップの設定と確認方法
- 1
準備:WindowsのPower Automate for desktopで標準構文のフローを作ります。自分が読み書きできる練習用の C:\Work\Input と C:\Work\Archive を事前作成し、Inputには不要なダミーファイルだけを入れます。実ファイルの元データは使いません。パスは自分の環境に置き換えます。
- 2
日時の取得:現在の日時を取得しますで「現在の日時」「システムのタイムゾーン」を選び、出力を %Now% にします。加算する日時で元日時 %Now%、加算 -30、単位「日」、出力 %CutoffDate% にします。ループの外で一度計算するので、処理途中で基準がずれません。
- 3
一覧の取得:フォルダー内のファイルを取得で C:\Work\Input、ファイルフィルター *、サブフォルダーを含める=オフ、出力 %Files% にします。ArchiveはInputの外に置きます。この例はフォルダーそのものを移動しません。
- 4
判定:For eachの反復処理を行う値を %Files%、現在の項目を %CurrentFile% にします。その内側のIfで、左辺 %CurrentFile.LastModified%、演算子「より小さい」、右辺 %CutoffDate% を指定します。文字列へ整形せず日時のまま比べます。30日前ちょうどは対象外で、「30日以上」とは異なります。
- 5
最初は移動しない:Ifの内側には「ファイルの移動」を置かず、「メッセージを表示」を置きます。本文に「候補:%CurrentFile.FullName%/更新:%CurrentFile.LastModified%/基準:%CutoffDate%」を指定します。IfのEnd、For eachのEndの順に閉じます。表示だけなのでInput・Archiveの中身は変わりません。
- 6
移動版への切り替え:候補を確認できたら、練習用フローのメッセージを表示をファイルの移動に置き換えます。対象 %CurrentFile.FullName%、宛先 C:\Work\Archive、同名ファイルが存在する場合=「何もしない」(上書きしない)にします。実行後は両フォルダーを確認します。同名でスキップしたファイルを移動成功として数えないでください。
- 7
日時だけで境界を練習:別の練習フローで日時取得と -30日の計算だけを作り、加算する日時で %CutoffDate% に -1秒を足した %TestDate% を作ります。Ifで %TestDate% が %CutoffDate% より小さいかを比べ、はい側とElse側をメッセージ表示だけにします。同じ取得済み基準に対して加算を0秒、+1秒へ変更すると、順に「はい・いいえ・いいえ」が期待値です。ファイル操作は追加しません。
- 8
対象0件:フォルダーが空ならFor eachは0回、古いファイルがなければIfの内側は0回です。どちらも候補メッセージは出ません。メッセージがないだけで失敗とは決めず、%Files% の件数、各LastModified、CutoffDateを実行時の変数で確認します。
- 9
前提と利用権:この例はローカルPC上で手動実行するデスクトップフローです。クラウドの接続設定は使いませんが、PADのサインイン・利用権と組織ポリシーを確認します。クラウドからの起動や無人実行は別の設定・利用権が必要です。
- 対象環境
- Power Automate for desktop(Windows)
- 更新日
- 2026-10-11