繁体   English   中英

从子文件夹中删除早于特定日期的专门命名的子文件夹

[英]Delete specifically named subfolder older than a specific date from subfolders

我有一些网络驱动器,其文件和子文件夹的时间早于特定日期。

要删除子文件夹,我倾向于使用类似的东西(将网络共享映射到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:中的每个子文件夹都有许多文件和文件夹,但是我想从其中删除所有早于6个月的名为SIS.d的子文件夹。 是否可以修改forfiles命令来执行此操作? 如果没有,那么任何人都可以帮助其他方法吗?

我可以使用/m */SIS.d/*.*吗?

谢谢,菲尔

是的,尽管名称如此,仍可以对该任务使用命令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

档案搜寻

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

并由于/C "..."选项而针对每个找到的条目执行以下命令:

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

%backuplog%也将在执行命令forfiles之前进行扩展,并有望扩展为完全限定的文件名,而无需在命令行上附加双引号。

如果带有@isdirforfiles传递给命令的字符串等于字符串TRUEcmd.exe首先运行命令IF进行区分大小写的比较。

在此字符串比较条件为true的情况下, cmd.exe运行RD命令以@path删除目录及其所有子目录和文件,这些目录和文件指定了使用@path引用的完整合格目录名, @path传递给始终用双引号forfiles来的cmd.exe

命令RD的标准输出和错误输出重定向到名称已分配给环境变量backuplog 在使用选项/S/Q命令RD从不输出任何东西来处理STDOUT 如果由于各种原因无法完全删除目录, RD将输出一条错误消息来处理STDERR 因此仅使用2>>"%backuplog%"而不是>>"%backuplog%" 2>&1就足够了。

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

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

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

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

另请参阅有关使用命令重定向运算符的Microsoft文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM