フォルダ内のファイルを1件ずつzipに圧縮する【Power Automate Desktop】

#RPA #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

を選択します。

For each の設定
パラメーター名内容
反復処理を行う値%Files%
生成された変数%File%

反復処理を行う値に先ほど「フォルダー内のファイルを取得」で取得した変数(既定では %Files%)を設定します。

生成された変数は初期状態の「CurrentItem」でも問題ありませんが、変数が何を保持しているのかわかるように「File」に変更しておきます。

ファイルを圧縮する

圧縮 > ZIP ファイル

からアクションを選択し、以下のパラメータを設定します。

ZIP ファイルの設定
パラメーター名内容
アーカイブ パス%File%.zip
圧縮するファイル%File%
圧縮レベル速度と圧縮の最適なバランス
パスワード
アーカイブ コメント

アーカイブパスは作成される zip のパスです。今回は元のファイルのパスの後ろに .zip を付けるよう指定しており、元ファイルと同じ場所に ファイル名.拡張子.zip が作成されます。 圧縮するファイルは対象のファイルパスを指定するので、For each で取得した変数 File を設定します。 その他圧縮レベル、パスワード、アーカイブ コメントは任意の値を設定してください。

フローの全容

最終的にフローは以下のようになります。簡単ですね。

完成したフロー

実行結果

上記までで作成したスクリプトを実行すると、フォルダはこのようになります。

実行後のフォルダ

ファイルだけが 1 件ずつ圧縮されました。フォルダ(サブフォルダ)も 1 件ずつ圧縮したい場合は、「フォルダー内のサブフォルダーを取得」で取得した変数を For each に渡し、同様に ZIP ファイルのアクションを使います。

アクション名や画面は PAD のバージョンにより多少異なる場合があります。