我在Windows 10上运行Matlab R2020b。
有没有一种方法可以在Matlab中以编程方式将包含内容的文件夹移动到回收站?
例如,以下适用于单个文件
previousState=recycle('on');
delete(filename); % if replaced with rmdir(DIR,'s');, folder is deleted permanently
recycle(previousState);
但同样的切换方式对文件夹不起作用。有办法吗?
我能想到的唯一可能的解决方法是在空文件夹上使用通配符:delete(fullfile(DIR,'*')
,然后使用rmdir(DIR)
。但这对我的申请不起作用。我希望在回收站中保留文件夹的临时副本,以防我的脚本以某种意想不到的方式发出警告,在这种情况下,我可以有第二次机会看到原始文件。在这个特定的用例中,有数百个文件夹,每个文件夹都包含数百到数千个文件。通配符方法确实会将单个文件放入回收站,但它会丢失原始文件夹结构,因此无法选择性地恢复文件夹。因此产生了这个问题。
由于操作系统是Windows 10,因此可以使用powershell,如下所示。
例如,使用C:
中的以下recycleFile.ps1
文件
Param(
[string]$filePath # can be folder
)
$sh = new-object -comobject "Shell.Application"
$ns = $sh.Namespace(0).ParseName($filePath)
$ns.InvokeVerb("delete")
Matlab中的以下段落将把文件夹fullfilepath
移动到的回收站
[status,cmdout]=system(['powershell.exe -ExecutionPolicy Bypass -File "',...
fullfile('C:','recycleFile.ps1'),'" "',...
fullfilepath),'"']);
然而,也有几个不利因素。
该操作等效于context menu
->delete
。它会弹出回收进度界面,抢占前台。它也有点慢。如果有问题的文件夹不符合回收条件,而只能直接删除,它甚至可能需要用户确认。