2022年10月9日日曜日

バッチファイル(*.bat)でファイルをゴミ箱に入れる

バッチファイルでファイルを直接削除するのは怖いのでゴミ箱を経由する

バッチファイルで直接ゴミ箱に入れることはできないので、WSH経由で削除します。

PowerShellを使う方法もありますが、セキュリティ的に使えない事が多いのでWSHを選択しました。
また、そもそも全てをWSHで実現すれば良いと思いますが、BATファイルの方が楽なケースも多いので結構役に立ちます。

sample.bat (バッチファイルサンプル)
@echo on
CScript.exe trash.js c:\folder\test1.txt c:\folder\test2.txt
trash.js
var args = WScript.Arguments;
var sa = WScript.CreateObject("Shell.Application");
var fso = WScript.CreateObject("Scripting.FileSystemObject");

for (var i = 0; i < args.length; i++ ) {
  arg = args(i);
  WScript.Echo(arg);
  sa.NameSpace(10).MoveHere( arg );
  while( fso.FileExists( arg ) ){
    WScript.Sleep(100);
  }
}

// ゴミ箱の取得(NameSpace関数の10の意味)
// https://learn.microsoft.com/ja-jp/windows/win32/api/shldisp/ne-shldisp-shellspecialfolderconstants
// WScript.Echo( sa.NameSpace(10).Title );

今後改善したい項目

  • エラー処理
  • 相対パス指定対応

0 件のコメント:

コメントを投稿

質問、要望、指摘など書いていただいてもよいですが、対応できるとは限りませんのでご了承ください。私に対するものも含め他の人を嫌な気分になるようなコメントは避けてください。