![](/img/trans.png)
[英]Batch file to delete subfolders in directory if all files is older than 3 days
[英]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
之前进行扩展,并有望扩展为完全限定的文件名,而无需在命令行上附加双引号。
如果带有@isdir
的forfiles
传递给命令的字符串等于字符串TRUE
则cmd.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.