【課題】
以下の内容を満たすタスクを作成してみましょう。
■1. 事前準備
以下のzipファイルをダウンロードし、任意の場所に解凍してください。
https://www-1.sct.co.jp/download/automate/Sample_Task/00008982/00008982.zip
■2. 内容(クリックして展開してください)
--------------------------------------------------------------------------------------------------
zipファイルを解凍すると、以下のようなフォルダ構造でファイルが解凍されます。
(フォルダ階層がある程度分かるよう、下図では3層まで直線を引いています。図を拡大するにはクリックしてください。)
これらのフォルダについて、以下のような操作をします。
1. フォルダの中身が空(=フォルダにファイルが無い)の状態であれば、そのフォルダを削除する
2. フォルダを削除した結果、その親フォルダも空になった場合は、その親フォルダも削除する
3. 1と2を繰り返し、中身が空のフォルダが無くなったら処理を終了する
今回はフォルダ群のうち、下部に赤線を引いたフォルダ直下にのみファイルが存在しています。
(図を拡大するにはクリックしてください。)
そのため、下図の状態になれば処理が完了になります。合計5フォルダ、4ファイルが残ります。(ファイルは「あ.txt」、「い.pdf」、「う.xlsx」、「お.docx」が残る)
※なお前提として、容量が0バイトのファイルは存在しないものとします。
※また、フォルダを削除する順序は問いません。最終的な結果が意図通りになればよいものとします。
--------------------------------------------------------------------------------------------------
■3. 処理を作成する上での禁則事項
・ファイルを手動・AutoMateでの操作問わず移動させることは禁止とします
・フォルダの削除以外でもとのフォルダ構造を変化させることは禁止とします
・不要なフォルダをハードコーディング(フルパスを固定値で直接指定)で削除指定することは禁止とします
・中身が空のフォルダ以外のフォルダや存在するファイルを削除すると失敗です
・ループのブロックを不定回数増やして対応することは禁止とします。同じ内容のループブロックがタスク中に何度も出現してはならないものとします。
■4.ヒント
(ヒントを見る際は、クリックして展開してください。)
ヒント1
今回は、最小で「ファイル システム」「Loop」「If」の3種のアクションを利用すれば処理が作成できます。
「データセット」を利用すれば、必ずしも変数を作成する必要はありません。
ヒント2
上の階層のフォルダから一つずつブランクかどうかチェックして削除するのは、今回は大変効率が悪くなり、処理が煩雑になりがちです。
一つずつフォルダをチェックしなくても、「このフォルダよりも下にファイルは無い」と等価の条件を利用すると手数が少なくて済みます。
ヒント3
「ファイル システム - 情報の取得」アクションを利用すると、そのフォルダ配下のフォルダ一覧のデータセットが作成できます。
なお、そのサブフォルダの情報も全て欲しい場合は、「ファイル オプション」配下の「サブフォルダーを含める」にチェックを入れると取得できます。
仮に1フォルダ分しか情報が取れない(データセット化されない)場合は、ワイルドカード「*」を使用すれば良いです。
ヒント4
フォルダ一覧のデータセットが作成できれば、そのデータセットに従って「Loop - データセット」を使えば順繰りにチェックできます。
その中で削除するかどうかの条件が決められれば、「IF - 条件式」でそのフォルダを削除するかどうかを決められそうです。
ヒント5
フォルダ一覧が取得できても、上層から参照するように指定するのは至難の業です。
何度もフォルダを消す→その親フォルダをチェックする、という流れは避けたいものですが、下記の画像を見て何か法則が分からないでしょうか?
↓ヒント5に関する画像です。
ヒント画像を見るにはここをクリック
ヒント6
「そのフォルダ配下にファイルは無い」=「ディレクトリサイズが0」という図式が成立します。
「ファイル システム - 情報の取得」アクションの「ディレクトリサイズを計算する」にチェックを入れればフォルダごとの容量が計算できます。
ヒント7
「データセット名.size」で条件判断して、0バイトならば消すようにすれば不要なファイルは消せそうです。
親ディレクトリが消えていると、子ディレクトリを消そうとしたときにフォルダが存在しないエラーとなりますが、無視してよいので継続すればよそさうです。
■5. 処理作成において参考となるページ(逆引きページなど)
コラム:データセット(Dataset)に関するあれこれ
エラー後の処理
処理を繰り返す(データセット)
条件で分岐する(if、else、else if文)
■6. 構築例および解説
以下の記事に構築例および解説を記載しています。
https://automate.sct.co.jp/knowledge/12048/