定时删除文件夹定时删除一个文件下的所有子文件夹及文件2010-03-1409:23:32|分类:默认分类|标签:|字号大中小订阅请问怎样定时删除一个文件夹内的所有子文件夹和文件呢?同时又要保留那个父文件夹。比如我要删除d:\test\内的所有子文件夹和文件,但保留test这个夹子,我是win2000的域,请问怎样实现呢?bat可以吗?回答:在win9x的年代,用deltree这个外部命令就很容解决这个问题,不过从windows2000及windowsxp之后,就取消了这个命令(真的是很奇怪),那么现在怎么解决呢?大家可能想到用del+rd来解决这个问题。但有个问题,就是rd命令会删除您指定的目录。例如,当前目录结构如下:D:\>attrib/s/dd:\test\*.*ARID:\test\:\test\:\test\:\test1\1此目录带有隐藏属性ARID:\test\1\:\test1\2此目录带有系统属性ARID:\test1\2\:\test,那么rd会将test这个目录连同其中的内容一起删除掉,而我们要保留test这个目录。那么怎么办呢?我们可以先用del把d:\test目录下的文件删除掉,然后再用rd把子目录删除掉。这个批处理的内容如下,,。---不包含此行---attrib-s-h-r%1\*.*&&del%1\*.*/qdir%1/ad/b/s>%%iin()dord%%i/s/q---不包含此行---那么当我们需要删除test目录的时候,就这么执行":\test"(不包含引号)。批处理第一行第一行批处理中的%1就会读取批处理参数,变成这样attrib-s-h-rd:\test\*.*&&deld:\test\*.*/q先用attrib去掉test目录下所有文件的属性,以保障后面的del顺利执行。&&是连接符号,当执行完前面的命令后,执行连接符后面的命令。del删除test目录下所有文件,因为rd命令是无法删除test目录下的文件的。好,test下的文件删除完了,我们就开始删除test目录下的子目录。批处理第二行批处理执行到第二行,%1读取批处理参数,就是我们在deltree后面输入的的d:\test,变成这样dird:\test/ad/b/s>:/AD显示具有指定属性的目录。从而让后面的rd命令删除这些目录/B使用空格式(没有标题信息或摘要)。避免后面的删除命令出错,因为dir命令还会输出一些其它信息,例如“驱动器C中的卷没有标签。卷的序列号是EE5B-D3AF”,显然这会导致rd命令出错。/S显示指定目录和所有子目录中的文件。输出目录及文件的完整路径,便于后面rd命令删除。执行完这一行批处理后,,,会看到如下输出:d:\test1\1d:\test1\2为什么要输出到文本文件呢?为什么不直接把dir的结果输出给rd呢?因为dir的结果会有多行,如果一行一行写,不是太麻烦了吗?而且将来实际运用批处理的时候,我们也无法预测目标文件夹下会有多少个子目录。将dir结果输出到文本文件,然后让rd去读不是很方便吗?批处理第三行好,,只要使用rd命令删除这些目录就好了。但实际上rd本身没有读取文本文件的功能,我们用for来解决这个问题。批处理执行到了最后一行:for/f%%iin()dord%%i/s/q%%i是在for语句中使用的循环变量,这个变量每使用一次,,作为变量值,然后for负责将这个变量传递给后面do执行的命令中,那么for依次执行循环所形成的命令就是这样的:第一次循环rdd:\test1\1/s/q第二次循环rdd:\test1\2/s/qgnaw0725注:关于for循环的更多解释请参考这里的rd参数含义如下:/S除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。/Q安静模式,带/S删除目录树时不要求确认故障排查好,到此位置,:\test下的所有文件和文件夹,而无论它们带什么属性。如果大家在使用这个批处理的过程中出现了问题,例如没有删除掉文件,那么如何进行故障排查呢?我们可以有两个che
定时删除文件夹 来自淘豆网m.daumloan.com转载请标明出处.