Power Automate Desktopでファイルをゴミ箱に送る

Power Automate Desktopでファイルをゴミ箱に送るフローを作ってみました。

「ファイルの削除」アクションを使用してファイルを削除するとゴミ箱に入らず完全に消えてしまいます。これだと後から見たいときに困る場合があります。

ゴミ箱に入れるアクションが見つからないのでVBScriptを使ってゴミ箱に送ります。

一応テストはしていますが、よくコードを理解してテストをしてからご利用ください。


VBScriptでゴミ箱に送る方法

VBAを使っていた時にはAPIを使って処理していましたが、シェルオブジェクト(実体はエクスプローラー)を使えば簡単に記述できるようです。

vbsでゴミ箱への移動


Power Automate DesktopからVBScriptを使う方法は次のページに書かれています。

演習問題 - 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
Set uShell = CreateObject("Shell.Application")
Set uRecycleBin = uShell.Namespace(ssfBITBUCKET)
uRecycleBin.MoveHere "%SelectedFile.FullName%"

  1. 定数設定
  2. ShellオブジェクトのApplicationプロパティ(値)からオブジェクトを生成します。
  3. ShellオブジェクトのNamespaceメソッド(命令)を実行してゴミ箱フォルダーオブジェクトを取得します。
  4. ゴミ箱フォルダーオブジェクトのMoveHereメソッドを使って、指定されたパスをゴミ箱フォルダーに移動します。
    SlectedFile変数は事前にアクションで代入しておき、FullNameプロパティを使ってファイルのフルパスを取得します。
    パスに空白が入っている(例えば program files)場合に備えて変数をダブルクォーテーションで囲っておきます。

アクションに指定すると次のようになります。

使用例


  1. ユーザーにファイルを選択させます。
  2. ゴミ箱に送ります。
  3. ファイルが削除されるまで待機します。

上のページを読むと、MoveHereは非同期、つまり削除処理が終わるのを待たずにメソッドが終了してしまうため、すぐに次のアクションに進んでしまいます。

それで問題ない場合も多いと思いますが、削除が完了した事を確認するため、3番の処理も入れてみました。


フォルダー削除

フォルダーごと削除したい場合には、MoveHereメソッドに対して、パスではなくFolderItemオブジェクトもしくはFolderItemsオブジェクトを指定する必要があると書かれています。

Folder.MoveHere method

次のページを参考にしてフォルダーを削除コードも書いてみました。

WSH/フォルダを選択して移動


Const ssfBITBUCKET = 10
uPath = "%uFullName%"
Set uShell = CreateObject("Shell.Application")
Set uRecycleBin = uShell.Namespace(ssfBITBUCKET)
Set uFSO = CreateObject("Scripting.FileSystemObject")
If uFSO.FolderExists(uPath) Then
    Set uFolder = uShell.Namespace(uPath)
    uRecycleBin.MoveHere uFolder.Self
Else
    uRecycleBin.MoveHere uPath
End If


  1. 定数を定義
  2. Power Automate Desktopのパス変数をVBScriptのuPath変数に設定
  3. ゴミ箱フォルダーのオブジェクトを取得
  4. フォルダーの存在判定メソッドを使うためにFileSystemObjectを取得
  5. uPathで指定されたフォルダーが存在していれば
  6.   uPathで指定されたフォルダーオブジェクトを取得
  7.   uPathで指定されたフォルダーをゴミ箱フォルダーに移動
  8. 存在しない場合
  9.   uPathをゴミ箱フォルダーに移動
  10. If End


手順7補足

MoveHereにはFolderItemオブジェクトを指定することになっています。Namespaceが返すのはFolderオブジェクトなので、.Selfプロパティを使ってFolderItemオブジェクトを返しています。

試しに.Selfを省略して指定したところ、それでも削除されました。Selfはデフォルトプロパティなのかもしれません。

なおFolderオブジェクトにはSelfプロパティは存在しません。VBAでデバッグしてみるとNamespaceメソッドで取得したオブジェクトの型はFolder3となっています。Folder3のリファレンスは見当たりませんがFolder2のリファレンスにはSelfプロパティの記載があります。

Folder Object

Folder2 object

アクションに指定した場合


使用例


一応、フォルダーが削除されるまで待ってみました。待たない場合Loop以降は不要です。


シェルとは

WindowsなどのOSのプロセス管理やメモリ管理などの機能はカーネル(核)と呼ばれ、ユーザーとのやり取りをするインターフェイスはシェル(殻)と呼ばれています。

Windowsの場合はエクスプローラー(ブラウザのInternet Explorerの事ではありません)やそれによって制御されているデスクトップがシェルになります。

エクスプローラーをプログラムから制御することができれば、エクスプローラーの機能であるゴミ箱に送るも使えるという事です。

デスクトップはエクスプローラーによって制御されているため、エクスプローラーがフリーズしたり異常終了したりすると、デスクトップが操作できなくなったり画面が真っ暗になったりします。


コメント

アクセスランキング(過去30日間)

Amazon Prime Videoで4K UHD映画を検索する方法

iPhone 12 Proと iPhone 8 Plusのサイズを比較

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

Microsoft Flight Simulator (2020)のPS4コントローラー設定

Teamsで日本語入力すると左上に変換ウィンドウが出る

Buffalo 外付けUSB HDD HD-AD6U3 を購入しました

iPhone 12 Pro Maxでも裸族かも

コールマン タフスクリーンタープ/400 を購入しました

DELL 31.5インチ 4K HDR モニター U3219Q を購入

テントやタープなど防水製品には寿命がある