通过 cmd 将网络文件夹中的文件移动到回收站

通过 cmd 将网络文件夹中的文件移动到回收站

我的目标是使用 cmd 文件将一些文件移入回收站。我已经使用 Cmdutils/recycle 完成了此操作,当文件存储在我的计算机(Windows 10)上时,它工作得很好。不幸的是,这些文件(以及批处理文件)位于网络文件夹中(在 Win Server 2016 上)。我尝试将该文件夹映射为计算机上的网络驱动器并运行该 cmd,但这些文件被完全删除。如果它们位于网络驱动器上,有没有办法将它们移入回收站?

我读了这里如何将未使用的文件夹映射到该网络驱动器,并且一旦完成,cmdutils/recycle 就会正确地将文件移动到我的本地回收站。问题是不同的用户需要运行该 cmd,因此如果有一种方法可以通过 cmd(或 powershell)而无需执行该技巧,我会更高兴。

任何想法?

谢谢!路易吉。

答案1

好的..好的..我已经仔细考虑过这个问题,并查找了使回收站实现的 Win32 API 和实现。

当设置了 FOF_ALLOWUNDO 标志(回收站)时,SHFileOperation(将内容移动到回收站的实际函数)不支持网络路径(无论是否映射)。您找到的技巧是一种解决方法,微软很可能随时会修复它。如果您阅读您提供的解决方法页面上的所有帖子,您会发现它使 API 失效。

让我们从逻辑开始。查看您拥有的任何本地驱动器的根目录。您将找到一个名为 $Recycle.bin 的文件夹。当您删除文件时,Windows 资源管理器会使用此文件夹将文件移动到那里,而不是真正删除。它不会将文件从 D: 移动到 C:\Recycle.Bin.. 等等。该机制针对单个卷进行工作。尽管重命名原始文件和跟踪删除日期/时间有些复杂,但就是这么简单。

当您查看网络共享时,您将找不到回收站文件夹,Windows(理所当然)也不会为您创建回收站文件夹。您能想象如果每个管理员都必须跟踪每个用户在其共享中删除的所有垃圾会怎样吗?微软本可以很好地完成这项工作……但他们选择不这样做。

您也许可以让它发挥作用,但是这里有两个基本问题。

问题 1 是 Microsoft 从未打算让 cmd.exe 访问回收站。即使允许此调用进入 shell API(又名 explorer)的实用程序也是如此。

问题 2 是,即使您可以演示该机制确实“有效”的情况,它也无法从网络共享中正常工作。直到您在映射的网络驱动器上看到 $Recycle.bin 文件夹……测试代码路径之外的事情正在发生。

我希望其他人可以给你一个解决方法,但除非你“自己动手”,否则我认为它充其量也只是粗制滥造而已。

祝你好运!我是认真的!

相关内容