删除所有文件夹中的$ recycle.bin文件夹

时间:2016-06-16 16:16:56

标签: batch-file cmd recycle-bin

请在这里需要一点帮助......

需要一个脚本,最好是批处理脚本,以删除所有子文件夹中的$ recycle.bin文件夹。

我有驱动器,我有用户文件夹,每个用户文件夹都有自己的$ recycle.bin文件夹。

Structure on Drive C:\
User1 > $recycle.bin
User2 > $recycle.bin
User3 > $recycle.bin

当用户删除其个人资料中的内容时,它会发送到c:\ user1 \ $ recycle.bin。 目前我分别进入每个文件夹删除$ recycle.bin。

1 个答案:

答案 0 :(得分:2)

将这个或多或少的单行批处理文件与文件夹路径C:\一起替换为真正的父文件夹路径:

@echo off
for /F %%D in ('dir "C:\$recycle.bin" /AD /B /S 2^>nul') do rd /Q /S "%%D" 2>nul

上面的命令行在驱动器C的所有目录中递归搜索文件夹$recycle.bin,并删除每个找到的$recycle.bin

还有第二个解决方案更快,因为首先只搜索驱动器C的根目录中的非隐藏文件夹:(用户文件夹),然后在每个找到的(用户)文件夹中搜索文件夹$recycle.bin的下一个文件夹如果在用户文件夹中找到了这样的子文件夹,则会被删除。

@echo off
for /D %%U in ("C:\*") do (
    for /F %%D in ('dir "%%U\$recycle.bin*" /AD /B 2^>nul') do rd /Q /S "%%U\%%D" 2>nul
)

第三种解决方案是使用第二种解决方案,而不在用户文件夹中搜索$recycle.bin,而只是假设存在这样的文件夹并将其删除。如果驱动器C:的根目录下没有文件夹$recycle.bin,则会通过命令 RD 输出错误消息,但此错误消息将被抑制,如下所述。

@echo off
for /D %%D in ("C:\*") do rd /Q /S "%%D\$recycle.bin" 2>nul

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • dir /?
  • echo /?
  • for /?
  • rd /?

有关2>nul的解释,请参阅Microsoft文章Using command redirection operators

通过将错误消息重定向到设备,可以禁止在找不到名称为$recycle.bin的任何文件夹时,通过命令 DIR 输出到 STDERR 的错误消息NUL 2>nul。重定向操作符>必须使用^进行转义,以便在执行命令 DIR 时应用,而不是被解释为指定的命令 FOR 的重定向由于语法错误而导致命令处理退出的无效位置。

2>nul也用于命令 RD ,以禁止用户当前正在使用文件夹内的任何文件夹或文件上的错误消息输出,因此删除文件夹失败。在第三个解决方案中,如果根本没有文件夹$recycle.bin,它也会禁止显示错误消息。