フォルダ内のファイルを1件ずつzipに圧縮する【Power Automate Desktop】
エクスプローラーの通常機能を使用すると、特定のフォルダを zip 形式に圧縮することができます。
ただ、ファイルを 1 件 1 件圧縮したい場合は、それぞれ zip への圧縮を指示していかなければならないため、件数が多くなると手間がかかってしまいます。
今回は、Power Automate Desktop(PAD)の「フォルダー内のファイルを取得」「For each」「ZIP ファイル」の 3 つのアクションを組み合わせて、特定のフォルダ内のファイルを 1 件ずつ圧縮する方法を紹介します。
デモ環境
今回圧縮対象とするのは以下のフォルダです。直下にフォルダ、テキスト、画像がそれぞれ 3 つずつ存在しています。「フォルダー内のファイルを取得」はファイルのみを返すため、フォルダは圧縮されません。
Power Automate Desktop のフロー紹介
ファイル一覧を取得
まずアクション一覧から、
フォルダー > フォルダー内のファイルを取得
を選択します。
設定するパラメータは以下の通りです。
| パラメーター名 | 内容 |
|---|---|
| フォルダー | C:\power-automate-test |
| ファイルフィルター | * |
フォルダーには圧縮したいファイルが格納されているフォルダーを指定します。 ファイルフィルターは初期状態の「*」を設定することで、フォルダー直下の全てのファイルが対象となります。 特定のファイルのみを対象としたい場合は、後述するフィルターの設定を行ってください。
特定のファイルのみ対象とする
対象フォルダの特定のファイルのみ圧縮したい場合は、先ほどのアクションのファイルフィルターを設定します。
ファイルフィルターにはワイルドカード(*.txt など)を指定します。
テキストファイルのみを対象にする場合は *.txt と指定します。
ファイルを 1 件ずつループする(For each)
アクション一覧から、
ループ > For each
を選択します。
| パラメーター名 | 内容 |
|---|---|
| 反復処理を行う値 | %Files% |
| 生成された変数 | %File% |
反復処理を行う値に先ほど「フォルダー内のファイルを取得」で取得した変数(既定では %Files%)を設定します。
生成された変数は初期状態の「CurrentItem」でも問題ありませんが、変数が何を保持しているのかわかるように「File」に変更しておきます。
ファイルを圧縮する
圧縮 > ZIP ファイル
からアクションを選択し、以下のパラメータを設定します。
| パラメーター名 | 内容 |
|---|---|
| アーカイブ パス | %File%.zip |
| 圧縮するファイル | %File% |
| 圧縮レベル | 速度と圧縮の最適なバランス |
| パスワード | |
| アーカイブ コメント |
アーカイブパスは作成される zip のパスです。今回は元のファイルのパスの後ろに .zip を付けるよう指定しており、元ファイルと同じ場所に ファイル名.拡張子.zip が作成されます。
圧縮するファイルは対象のファイルパスを指定するので、For each で取得した変数 File を設定します。
その他圧縮レベル、パスワード、アーカイブ コメントは任意の値を設定してください。
フローの全容
最終的にフローは以下のようになります。簡単ですね。
実行結果
上記までで作成したスクリプトを実行すると、フォルダはこのようになります。
ファイルだけが 1 件ずつ圧縮されました。フォルダ(サブフォルダ)も 1 件ずつ圧縮したい場合は、「フォルダー内のサブフォルダーを取得」で取得した変数を For each に渡し、同様に ZIP ファイルのアクションを使います。
アクション名や画面は PAD のバージョンにより多少異なる場合があります。