我有一些网络驱动器,其文件和子文件夹的时间早于特定日期。
为了删除子文件夹,我倾向于使用类似以下的内容(将网络共享映射到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
档案搜寻
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
扩展,并希望扩展为完全限定的文件名,而无需在命令行中附加多余的双引号。
cmd.exe
如果with传递给命令的字符串等于string,则首先运行命令IF进行区分大小写的比较。forfiles
@isdir
TRUE
在此字符串比较条件为真,cmd.exe
运行命令RD悄悄地用与所引用的全限定目录名指定的所有子目录和文件,删除目录@path
和传递forfiles
到cmd.exe
永远双引号括起来。
命令RD的标准输出和错误输出重定向到名称已分配给环境变量的文件backuplog
。命令RD从不输出使用选项和的内容处理STDOUT。如果由于各种原因无法完全删除目录,RD将输出一条错误消息来处理STDERR。因此,仅使用代替就足够了。/S
/Q
2>>"%backuplog%"
>>"%backuplog%" 2>&1
完全删除当前正在处理的目录会forfiles
导致产生一条错误消息,forfiles
以处理STDERR,该错误消息2>nul
在forfiles
命令行末尾被附加抑制。
注意: Windows上的目录分隔符是\
(反斜杠),而不是/
(正斜杠)。/
在Windows上用于选项,因为在此命令行上可以很好地看到它。因此,请勿通过使用错误/
而不是使用\
文件和目录参数字符串来编写依赖于Windows文件系统内核功能自动更正的命令行。
为了了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
cmd /?
forfiles /?
if /?
rd /?
另请参阅有关使用命令重定向运算符的Microsoft文章。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句