やりたいこと
仕事中にこんな指示が来ました。
「このフォルダの中身が更新されたら、フォルダ内にあるファイルの名前を、指定したメモ帳に書き出して!」
RPAについて色々と調べていた所なので、Power Automate Desktop(無料版)を使い、「中身が更新されたら」ではなく「1時間に1回フォルダの中のファイル名を書き出す!」(更新されたらではないですが・・・)と言う方法を試してみました。
主なポイント
どうやってやったら良いか迷ったのは下記の2つでした。
・手動でしかフローの実行が出来ないPower Automate Desktop(無料版)でどうやって定期的に(1時間に1回)動かすか。
・フォルダ内のファイル名取得 → メモ帳に書き出しをどうやってやるか。
定期的なフローの実行の参考になったのは下記のページでした。
https://cravelweb.com/rpa/power-automate-desktop/how-to-run-scheduled-flow-on-power-automate-desktop-for-free
また、ファイル名の取得と書き出しは上司からコマンドを教えてもらい、実現できました。
実際にやった事
今回はデスクトップに有る「共有フォルダ」の中身を、デスクトップに有る「共有一覧」と言うメモ帳に書き出します。
●フォルダ内のファイル名取得 → メモ帳に書き出し
・システムから「DOS コマンドの実行」を選びます。
・DOSコマンドまたはアプリケーションに dir /b >C:\Users\namae\Desktop\共有一覧.txt を記入
dir /b で、指定した場所にあるファイルの名前を取得し、指定した場所に書き込みます。
なので後ろの >C:\Users\namae\Desktop\共有一覧.txt で書き込むメモ帳を指定してあげます。
・作業フォルダーには C:\Users\namae\Desktop\共有フォルダ と記入
読み込むフォルダを指定します。
●定期的な動きの作成
定期的に同じ動きをさせるので「Loop」を使います。
1時間に1回として今回は24回更新したいと思うので、開始値を0 終了を24 増分を1にします。
●「現在の日時を取得」と「次の実行時間の設定」
では「Loop」の中に「DOS コマンドの実行」を入れてループさせましょう。
しかし、これでは「DOS コマンドの実行」を24回行ってすぐに終わってしまうので、少し細工を行います。
まず、現在の時刻を取得します。
そして1回目の実行は今終わったので、次に実行する時間を指定します。
日時は今取得した時間を使うので関数の %CurrentDateTime% を入れます。
加算には1を入れます。 (1時間ごとに実行するので)
時間単位は時間を入れます。
生成された変数 ResultedDate には次の実行時間(1時間後の時間)が入っています。
●次の時間までのループ
DOSコマンドを実行した時間を取得し、次に実行する時間も設定しました。
しかしこれでは次の時間(1時間後の時間)を設定しただけなのですぐ次のDOSコマンドを実行してしまいます。
ではどうするかと言うと
1時間たつまで足止めしましょう。
と言う事でもう一度ループを持ってきます。
今回使うループは「ループ条件」です。
今の時間が、先ほど指定した1時間後の時間より大きくなったら(時間が過ぎたら)ループを抜けるようにします。
最初のオペランドには1時間後の時間が入った関数 %ResultedDate% を入れます。
演算子には より大きい(>) を選択します。
2番目のオペランドには、今の時間 %CurrentDateTime% を入れていきます。
そしてそのループの中で今の時間を取得し続け、1時間後の時間になったらループを抜けDOSコマンドを実行してもらいます。ただし、新しく「現在の時刻を取得」を持ってくると時間の入った変数が変わってくるので、上に有る「現在の時刻を取得」をコピー貼り付けするか、新しく「現在の時刻を取得」を持って来て変数名を変えるかしてください。
これで1時間に1回DOSコマンドを実行しフォルダの中の情報をメモ帳に書き出すことが出来ます。