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 );

今後改善したい項目

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