【问题标题】:Delete specifically named subfolder older than a specific date from subfolders从子文件夹中删除早于特定日期的特定命名的子文件夹
【发布时间】:2018-11-13 10:34:09
【问题描述】:

我有一些网络驱动器的文件和子文件夹在特定日期之前被定期清除。

要删除子文件夹,我倾向于使用类似这样的方法(在将网络共享映射到 R:) 之后: forfiles /P "R:" /D -200 /C "cmd /c IF @isdir == TRUE rd /S /Q @path" >> %backuplog% 2>&1

但是,我现在有一个文件夹结构,其中填充了名称不可预测的文件夹(所以我不能很容易地直接映射它们),例如

R:/423423423/SIS.d/ R:/543543534/SIS.d/ R:/765465477/SIS.d/

R: 中的每个子文件夹都有许多文件和文件夹,但我想从其中删除所有名为 SIS.d 的 6 个月以上的子文件夹。是否可以修改 forfiles 命令来执行此操作?如果没有,有人可以帮忙用另一种方法吗?

我可以使用类似的东西吗 /m */SIS.d/*.*?

谢谢, 菲尔

【问题讨论】:

  • 也许只是添加了一个 for 循环?我没有在手机上测试这个,只是给你一个想法。 for /f "delims=" %%i in ('dir /s /b /ad R: ^| findstr SIS.d') do forfiles /P %%i /D -200 /C "cmd /c IF @isdir == TRUE rd /S /Q @path" >> %backuplog% 2>&1

标签: windows batch-file


【解决方案1】:

是的,尽管它的名称,也可以使用命令 FORFILES 来完成此任务。

%SystemRoot%\System32\forfiles.exe /P "R:\" /M "SIS.d" /S /D -200 /C "%ComSpec% /C if @isdir == TRUE rd /S /Q @path >>"%backuplog%" 2>&1" 2>nul

FORFILES 搜索

  • 在驱动器的根目录R: 因为选项/P "R:\"
  • 及其所有子目录,因为选项/S
  • 匹配不区分大小写的搜索掩码SIS.d 的条目(文件或目录),因为/M "SIS.d"
  • 由于/D -200,根据上次修改日期超过 200 天

并且由于选项/C "..."命令行为每个找到的条目执行:

C:\Windows\System32\cmd.exe /C if @isdir == TRUE rd /S /Q @path >>"%backuplog%" 2>&1

%backuplog% 在执行命令 forfiles 之前也会扩展,并希望扩展为完整的限定文件名,而不用在命令行中额外指定双引号。

如果forfiles@isdir 传递给命令的字符串等于字符串TRUE,则

cmd.exe 首先运行命令IF 进行区分大小写的比较。

在此字符串比较条件为真时,cmd.exe 运行命令 RD 以悄悄删除该目录及其所有子目录和文件,该目录由 @path 引用并通过forfilescmd.exe 始终用双引号括起来。

命令RD的标准输出和错误输出被重定向到文件名被分配给环境变量backuplog的文件。命令 RD 在使用选项 /S/Q 时从不输出处理 STDOUT 的内容。 RD 将输出一个错误消息来处理 STDERR 如果由于各种原因完全删除目录失败。所以只使用2>>"%backuplog%" 而不是>>"%backuplog%" 2>&1 就足够了。

完全删除当前由forfiles 处理的目录会导致forfiles 处理STDERR 的错误消息,该消息在forfiles 命令行末尾被附加的2>nul 抑制.

注意: Windows 上的目录分隔符是\(反斜杠)而不是/(正斜杠)。 / 在 Windows 上用于选项,因为它可以在此命令行上很好地看到。所以不要编写依赖于 Windows 文件系统内核函数自动更正的命令行,在文件和目录参数字符串中使用错误的/ 而不是\

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

  • cmd /?
  • forfiles /?
  • if /?
  • rd /?

另请参阅有关 Using command redirection operators 的 Microsoft 文章。

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2014-12-27
    相关资源
    最近更新 更多