如何在MatLab中删除包含内容的文件夹进行回收站

4nkexdtk  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(348)

我在Windows 10上运行的是MatLab R2020b。
有没有办法通过编程将包含内容的文件夹移动到回收站?
例如,以下命令适用于单个文件

previousState=recycle('on');
delete(filename); % if replaced with rmdir(DIR,'s');, folder is deleted permanently
recycle(previousState);

但同样的切换不适用于文件夹。有什么办法吗?
我能想到的唯一解决办法是在空文件夹上使用通配符:delete(fullfile(DIR,'*'),然后使用rmdir(DIR)。但这对我的应用程序不起作用。我希望在回收站中保留文件夹的临时副本,以防操作它们的脚本以某种意想不到的方式发出警告,在这种情况下,我可以有第二次机会看到原始文件。在这个特定的用例中,有数百个文件夹,每个文件夹包含数百到数千个文件。通配符方法确实会将单个文件放入回收站,但它会丢失原始文件夹结构,从而使有选择地恢复文件夹变得不切实际。这就是问题所在。

ndh0cuux

ndh0cuux1#

由于操作系统专门是Windows 10,因此可以使用PowerShell,如here所示。
例如,在C:\中包含以下recycleFile.ps1文件

Param(
  [string]$filePath # can be folder
)

$sh = new-object -comobject "Shell.Application"
$ns = $sh.Namespace(0).ParseName($filePath)
$ns.InvokeVerb("delete")

下面的文章将把文件夹fullfilepath移到回收站。

[status,cmdout]=system(['powershell.exe -ExecutionPolicy Bypass -File "',...
                            fullfile('C:','recycleFile.ps1'),'" "',...
                            fullfilepath),'"']);

然而,这也有几个不利之处。
该操作等同于context menu->delete。它将调出占据前台的回收进度UI。它也有些慢。如果有问题的文件夹不符合回收条件,而只能直接删除,则甚至可能需要用户确认。

相关问题