【第80回】ロータス博士のWinActor塾~ファイル削除実践編
さて、前回のファイル削除は覚えているかな?
今回は実践シナリオを紹介するのじゃ。
結構簡単な内容だったのでバッチリ覚えていますよ!
シナリオを最初から丁寧に・・・はこれまで散々やってきたからのう。
そろそろある程度省略しても大丈夫ではないかな?
今日は全体像とプロパティを見て処理を掴んでもらいたい。
全体像さえあれば、同じようにノード配置して作れますね。
助かった・・・。
まあ削除シナリオの一例として見てもらえれば良いじゃろう。
自分で作る際に色々とカスタマイズしてみるのも面白いぞ。
では早速やってみよう。
実践!過去ファイルの削除
シナリオ概要
今回作成するシナリオは、任意フォルダの中にあるファイル全てを対象にして
シナリオ実行当日の日付よりも古いファイルを削除します。
この例では、削除対象とする任意フォルダを変数の初期値で指定しています。
変数の初期値は「C:\WinActor塾\処理ファイル」としており
このフォルダの中には次のようなテスト用ファイルを格納しています。
「testA.txt」と「testB.txt」が過去のファイルとなりますので、この2つが削除されれば成功です。
※シナリオ実行当日を、記事投稿日である2022/08/01とします。
シナリオ全体像
シナリオフローの全体図は次のようになっています。
変数一覧
このシナリオで使用する変数は次の通りです。
処理の流れ
それぞれの部分がどのような処理を行っているかを解説します。
- 事前準備
繰り返しに入る前に、この部分で必要な情報を取得しておきます。
「日時取得」ノードで実行当日の日付を取得し
「ファイル一覧(ファイル数)取得」ライブラリで、対象とするフォルダ内のファイル数を取得します。
ここで取得したファイル数は、直後の繰り返し回数に使用されます。 - ファイルパスの取得
繰り返しに入ったら、対象フォルダ内のファイルパスを取得します。
フォルダ内の何番目のファイルを取得するかは「カウンタ」変数によって指定しています。 - ファイル情報取得
取得したファイルパスをもとに、そのファイルの情報を取得します。
今回は過去ファイルかどうかを判定するために「ファイル情報取得(更新日時)」ライブラリを用いて更新日時を取得しています。
続いて「日付差計算」ライブラリを使用し、事前準備で取得しておいた実行当日との差分を取得します。 - ファイル削除
ここで条件分岐を行い、削除すべきファイルかどうかを判定します。
「日付差計算」で取得した差分が過去であり、かつフォルダでない場合にTrue側に進みます。
True側には「ファイル削除」ライブラリを配置し、ファイルを削除します。
False側には「カウントアップ」ノードを配置し、「カウンタ」変数を+1します。
各ノードのプロパティ
各ノードのプロパティ設定を以下に示します。
取得結果に「現在日付」変数を指定して結果を格納します。
フォーマットタイプは「日付のみ」もしくは「日付と時間」を指定してください。
後に日付の差分を計算しますが、時間が含まれていても問題ありません。
フォルダ名に削除対象とするフォルダのパスを指定します。
今回は変数で用意しているので「フォルダパス」を選択します。
また、結果を受け取る変数に「ファイル数」を指定しています。
ファイル一覧の詳しい使い方はこちらの記事を参照してください。
繰り返しは回数指定でループさせます。
回数に「ファイル数」を指定しましょう。
フォルダ名に、削除対象のパスである「フォルダパス」を指定します。
カウンタには初期値が0となっている変数「カウンタ」を指定します。
ファイル名と種別は結果を受け取るため、それぞれ同名の変数を用意して設定しています。
取得したファイルがファイルだった場合、種別にtrueが格納され
フォルダ(ファイル以外)だった場合、falseが格納されます。
取得してきたファイル名から、更新日時の情報を取得します。
ファイル名にはそのまま「ファイル名」変数を、格納先変数には「更新日時」を指定します。
最初に日時取得ノードで取得しておいた現在日付を基準として
さきほど取得した更新日時との差分を計算します。
基準日に「現在日付」、比較日に「更新日時」を指定します。結果は「日付差」に格納されるようにします。
例えば、ファイルの更新日時が2022/07/25だった場合、現在日付(2022/08/01)との差分で
「-7」が「日付差」に格納されます。
比較される際、基準日や比較日に時間が入っていても日付単位で計算が行われます。
ここではANDを使用して条件を2つ指定します。どちらの条件も満たされた場合にのみtrueへ遷移します。
一つ目の条件は「種別」がtrueであることです。
これは、取得したファイルがファイルである(フォルダではない)ことをチェックしています。
ファイル削除ライブラリは、ファイル以外のものを指定するとエラーとなってシナリオが停止してしまうため
それを防止するためにこの条件が必要になります。
二つ目の条件は「日付差」が0未満であることです。
日付差計算での例の通り、比較日(更新日時)が基準日(現在日付)よりも過去である場合、マイナス値となります。
つまり、日付差 < 0 の条件を満たす場合は、ファイルの更新日時が過去であるということになります。
条件に一致したら「ファイル削除」ライブラリでファイルを削除します。
削除ファイル名に「ファイル名」を指定しましょう。
ファイルを削除しない場合は、次のファイルを取得するためにカウンタを+1しておく必要があるため
分岐ノードのFalse(ファイル削除の条件に一致しなかった場合)にカウントアップを配置して
「カウンタ」変数を+1します。
なんで削除しない時だけ+1するんですか?
こういうのってループ1回毎に加算していくものだと思うんですけど。
「カウンタ」という変数名を見て、なんとなくループ回数と思ってしまうかも知れんが
これはループ回数ではなく、情報を取得するファイルの番号のことなんじゃ。
ループ回数はもう固定数を指定しているから関係ないぞ。
あ、なるほどそうか!
これはファイルのカウンタであってループカウンタではないってことですね。
・・・あれ?でもやっぱり削除しないときだけ+1ってピンとこないなあ。
ではわかりやすいように図にしてみた。
ファイル名の横にファイル番号を入れたものがこれじゃ。
ファイル番号は毎回、上から順に0,1,2,3...と付けられる。
このように1ループ目で0番目のファイルが削除された場合
次のループでは1番目だったはずの「testB.txt」が0番目になっているじゃろ?
ファイルが1つ無くなっているわけじゃから、当然番号も1つズレる。
削除した時にカウンタの加算が要らない理由はこういうことじゃ。
おお!図だとすごくわかりやすい!
消したらファイルが減って番号がズレる。
考えてみれば確かにそうですね、なるほどなるほど。
実行結果
実行当日の日付よりも過去のファイルが削除され
当日日付である「testC.txt」だけが残りました。
シナリオダウンロード
今回のサンプルシナリオはこちらからDL可能です。
※ファイルの解凍には会員用パスワードが必要となります。会員登録はこちらから。
どうじゃ、今回すこーし駆け足じゃったが大丈夫かのう。
ちなみに削除の条件の「日付差 < 0」を「日付差 < -7」とすると
一週間より以前のファイルだけ削除するように変えられるぞ。
こうしてカスタマイズするのも面白いのう。
完全に理解しました!
シナリオ例があると真似して作りながら覚えらえるから
ありがたいなあ。
・・・なんだか今回は平和じゃな。
物足りない感じがするんじゃが気のせいか。
ロータス君が変なこと言ってないからかのう。
いや、真面目でいいじゃないですか・・・。
もしかして僕の爆笑トーク期待してます?
今やりましょうか!?
いや、遠慮しておこう。
それでは今日はここまで!
関連記事こちらの記事も合わせてどうぞ。
2024.11.05
【第105回】ロータス博士のWinActor塾~新しい画像マッチング画面
2024.09.27
【第104回】ロータス博士のWinActor塾~ガイド利用シナリオ(作成編)
2024.09.10