Power Automate Desktopでファイルをゴミ箱に送る
Power Automate Desktopでファイルをゴミ箱に送るフローを作ってみました。
「ファイルの削除」アクションを使用してファイルを削除するとゴミ箱に入らず完全に消えてしまいます。これだと後から見たいときに困る場合があります。
ゴミ箱に入れるアクションが見つからないのでVBScriptを使ってゴミ箱に送ります。
一応テストはしていますが、よくコードを理解してテストをしてからご利用ください。
VBScriptでゴミ箱に送る方法
VBAを使っていた時にはAPIを使って処理していましたが、シェルオブジェクト(実体はエクスプローラー)を使えば簡単に記述できるようです。
Power Automate DesktopからVBScriptを使う方法は次のページに書かれています。
実際のコードは次の通りで、2行です。
Const ssfBITBUCKET = 10
CreateObject("Shell.Application").Namespace(ssfBITBUCKET).MoveHere "%SelectedFile.FullName%"
1行目は定数ssfBITBUCKETに10を指定しています。Namespaceに直接10を指定しても動作はしますが、10だと後から見た時になんだかよくわからなくなるため、名前付きの定数を使ってわかりやすくしています。ちなみにBit Bucketとはヌルデバイス(Unixなら/dev/null)を指すようです。
2行目はオブジェクト操作になれていないと意味が不明だと思うので、次のようにばらして書いてみました。
Const ssfBITBUCKET = 10- 定数設定
- ShellオブジェクトのApplicationプロパティ(値)からオブジェクトを生成します。
- ShellオブジェクトのNamespaceメソッド(命令)を実行してゴミ箱フォルダーオブジェクトを取得します。
- ゴミ箱フォルダーオブジェクトのMoveHereメソッドを使って、指定されたパスをゴミ箱フォルダーに移動します。
SlectedFile変数は事前にアクションで代入しておき、FullNameプロパティを使ってファイルのフルパスを取得します。
パスに空白が入っている(例えば program files)場合に備えて変数をダブルクォーテーションで囲っておきます。
使用例
- ユーザーにファイルを選択させます。
- ゴミ箱に送ります。
- ファイルが削除されるまで待機します。
上のページを読むと、MoveHereは非同期、つまり削除処理が終わるのを待たずにメソッドが終了してしまうため、すぐに次のアクションに進んでしまいます。
それで問題ない場合も多いと思いますが、削除が完了した事を確認するため、3番の処理も入れてみました。
デスクトップフロー化
使うたびに、ファイル部分の手直しが必要なのが面倒になったので、デスクトップフロー化してみました。
VBScriptのコードは基本的に変わりありません。
uFilePathを入出力変数として定義します。
次のように他のフローから呼び出します。
他のデスクトップフローを呼び出すためパフォーマンス的には良くないかもしれませんが、時間がそれほど問題ない場合にはこちらの方が便利です。
フォルダー削除
フォルダーごと削除したい場合には、MoveHereメソッドに対して、パスではなくFolderItemオブジェクトもしくはFolderItemsオブジェクトを指定する必要があると書かれています。
次のページを参考にしてフォルダーを削除コードも書いてみました。
- 定数を定義
- Power Automate Desktopのパス変数をVBScriptのuPath変数に設定
- ゴミ箱フォルダーのオブジェクトを取得
- フォルダーの存在判定メソッドを使うためにFileSystemObjectを取得
- uPathで指定されたフォルダーが存在していれば
- uPathで指定されたフォルダーオブジェクトを取得
- uPathで指定されたフォルダーをゴミ箱フォルダーに移動
- 存在しない場合
- uPathをゴミ箱フォルダーに移動
- If End
手順7補足
MoveHereにはFolderItemオブジェクトを指定することになっています。Namespaceが返すのはFolderオブジェクトなので、.Selfプロパティを使ってFolderItemオブジェクトを返しています。
試しに.Selfを省略して指定したところ、それでも削除されました。Selfはデフォルトプロパティなのかもしれません。
なおFolderオブジェクトにはSelfプロパティは存在しません。VBAでデバッグしてみるとNamespaceメソッドで取得したオブジェクトの型はFolder3となっています。Folder3のリファレンスは見当たりませんがFolder2のリファレンスにはSelfプロパティの記載があります。
アクションに指定した場合
使用例
一応、フォルダーが削除されるまで待ってみました。待たない場合Loop以降は不要です。
シェルとは
WindowsなどのOSのプロセス管理やメモリ管理などの機能はカーネル(核)と呼ばれ、ユーザーとのやり取りをするインターフェイスはシェル(殻)と呼ばれています。
Windowsの場合はエクスプローラー(ブラウザのInternet Explorerの事ではありません)やそれによって制御されているデスクトップがシェルになります。
エクスプローラーをプログラムから制御することができれば、エクスプローラーの機能であるゴミ箱に送るも使えるという事です。
デスクトップはエクスプローラーによって制御されているため、エクスプローラーがフリーズしたり異常終了したりすると、デスクトップが操作できなくなったり画面が真っ暗になったりします。
コメント
コメントを投稿