首页 > 编程 > BAT > 正文

定时删除一个文件夹内的所有子文件夹和文件的方法

2020-06-09 14:01:32
字体:
来源:转载
供稿:网友

在win9x的年代,用deltree这个外部命令就很容解决这个问题,不过从windows 2000 及windows xp之后,就取消了这个命令(真的是很奇怪),那么现在怎么解决呢?大家可能想到用 del+rd来解决这个问题。但有个问题,就是rd命令会删除您指定的目录。例如,当前目录结构如下:
D:/>attrib /s /d d:/test/*.*
A    R  I    D:/test/1.txt          此文件带有只读属性
A   H   I    D:/test/2.txt          此文件带有隐藏属性
A  S    I    D:/test/3.txt          此文件带有系统属性
     H   I    D:/test1/1             此目录带有隐藏属性
A    R  I    D:/test/1/4.txt       此文件带有只读属性
    S    I    D:/test1/2             此目录带有系统属性
A    R  I    D:/test1/2/5.txt     此文件带有只读属性

批处理原理 如果您这么执行命令 rd d:/test,那么rd会将test这个目录连同其中的内容一起删除掉,而我们要保留test这个目录。那么怎么办呢?我们可以先用del把d:/test目录下的文件删除掉,然后再用rd把子目录删除掉。这个批处理的内容如下,大家将如下内容保存为后缀名为.bat 或者.cmd的文本文件,例如就叫 deltree.bat吧。
---不包含此行---
attrib -s -h -r %1/*.* && del %1/*.* /q
dir %1 /ad /b /s >del.txt 
for /f %%i in (del.txt) do rd %%i /s /q 
---不包含此行---
那么当我们需要删除test目录的时候,就这么执行 "deltree.bat d:/test"(不包含引号)。

批处理第一行 第一行批处理中的%1就会读取批处理参数,变成这样 attrib -s -h -r d:/test/*.* && del d:/test/*.* /q
先用attrib 去掉test目录下所有文件的属性,以保障后面的del顺利执行。
&& 是连接符号,当执行完前面的命令后,执行连接符后面的命令。
del删除 test目录下所有文件,因为rd命令是无法删除test目录下的文件的。好,test下的文件删除完了,我们就开始删除test目录下的子目录。

批处理第二行 批处理执行到第二行,%1读取批处理参数,就是我们在deltree后面输入的的 d:/test,变成这样 dir d:/test /ad /b /s >del.txt 这里dir命令后的各参数含义如下:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表