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

在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命令后的各参数含义如下:
 /AD          显示具有指定属性的目录。从而让后面的rd命令删除这些目录
/B          使用空格式(没有标题信息或摘要)。避免后面的删除命令出错,因为dir命令还会输出一些其它信息,例如“ 驱动器 C 中的卷没有标签。 卷的序列号是 EE5B-D3AF”,显然这会导致rd命令出错。
/S          显示指定目录和所有子目录中的文件。输出目录及文件的完整路径,便于后面rd命令删除。
执行完这一行批处理后,在当前目录下会产生 del.txt文件,您执行 type del.txt,会看到如下输出:
d:\test1\1
d:\test1\2
为什么要输出到文本文件呢?为什么不直接把dir的结果输出给rd呢?因为dir的结果会有多行,如果一行一行写,不是太麻烦了吗?而且将来实际运用批处理的时候,我们也无法预测目标文件夹下会有多少个子目录。将dir结果输出到文本文件,然后让rd去读不是很方便吗?

批处理第三行 好,我们已经将要删除的子目录列表输出到文本文件del.txt中了,只要使用rd命令删除这些目录就好了。但实际上rd本身没有读取文本文件的功能,我们用for来解决这个问题。批处理执行到了最后一行:for /f %%i in (del.txt) do rd %%i /s /q 
%%i是在for语句中使用的循环变量,这个变量每使用一次,就从 del.txt中读取一行,作为变量值,然后for负责将这个变量传递给后面 do执行的命令中,那么for依次执行循环所形成的命令就是这样的:
第一次循环 rd d:\test1\1 /s /q
第二次循环 rd d:\test1\2 /s /q
gnaw0725注:关于for循环的更多解释请参考 http://www.jb51.net/article/31284.htm
这里的rd参数含义如下:
/S      除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q      安静模式,带 /S 删除目录树时不要求确认

故障排查 好,到此位置,deltree.bat这个批处理就删除了d:\test下的所有文件和文件夹,而无论它们带什么属性。如果大家在使用这个批处理的过程中出现了问题,例如没有删除掉文件,那么如何进行故障排查呢?我们可以有两个check point:
批处理参数获取 就是考察批处理是否正确获取了参数,也就是我们输入的目标文件夹,我们可以在批处理的最前面加一个echo %1 ,看看结果,就是这样:
echo %1
attrib -s -h -r %1\*.* && del %1\*.* /q
gnaw0725注:批处理可以有9个参数,%0代表批处理自己,第一个参数%1,第二个%2,……依此类推
子目录输出列表 就是del.txt,您可以输入 type del.txt,如果正常,输出的内容应该是d:\test下的所有子目录。

其实删除文件与文件夹的命令用rd更简单与粗暴,具体的可以可以参考下面的命令:

复制代码 代码如下:

rd /s /q f:\ddd

时间: 2024-10-31 13:25:48

定时删除一个文件夹内的所有子文件夹和文件的方法_DOS/BAT的相关文章

如何用sql批量删除一个id段内的dedecms文章?

之前因为ytkah批量添加了dedecms文章,数量有些多,后面出现问题了,想要删除一部分织梦文章,后台一篇篇删,删到手软(相关内容:修改dedecms关键词到手软),于是就想到了sql数据库操作!那么,如何用sql语句批量删除一个id段内的dedecms文章呢?比如id从300到500之间的文章. 首先我们得先知道dedecms文章最常用到哪些数据表.从上一篇文章我们清楚了dedecms文章标题在dede_archives里,dedecms文章内容在dede_addonarticle里,the

dos下删除文件夹和文件的方法_DOS/BAT

在dos下删除文件夹或文件,先要确定文件夹或文件是否有特殊的属性,比如"系统"."只读"."隐藏",如果有,去掉这些属性,命令如下 文件夹: attrib c:\windows -s -r -h  文件:attrib -s -h -r c:\windows\autorun.inf 删除命令如下, 删除文件夹(空):rd c:\windows  删除文件:del c:\windows\autorun.inf 注:如果是当前路径下操作,可以省略路径.

cacls命令设置文件及其文件夹权限的方法_DOS/BAT

网上有许多讲解cacls权限设置的文章,虽然已经讲的比较简单,但是新手依然看的一头雾水,操作性不强. 下面以实例为大家一部一部讲解几个实用的命令. 你是否不想让别人在你的电脑上打开某个文件夹或者文件?是否有时想允许让别人看某个文件和文件夹下的文件,但是不想让别人更改?或者不想让自己电脑上的某个账户不能访问某个文件夹?如果有过那么可以用以下命令实现,而不需要借助其他加密软件. 注意要限制别人访问的文件或者文件夹所在盘必须要是NTFS文件系统的,而不能是FAT32格式.这或许是ntfs文件系统安全性

bat批处理批量修改文件扩展名的方法_DOS/BAT

有的时候我们可能会遇到,在一个文件夹内有很多个文件,我们需要修改这些文件的扩展名,当然我们可以一个一个的修改,可是如果有很多文件,那就很麻烦了,所以今天就教大家批量修改文件扩展名的方法,希望大家能够灵活运用. 这里假设你要把扩展名为.gif的文件都改成.jpg格式,那么具体方法如下: 1.首先进入需要改扩展名的文件夹内新建一个记事本 2.在记事本中输入如下内容 复制代码 代码如下: ren *.gif *.jpg 3.将记事本的扩展名改名为.bat 4.双击运行bat文件即可批量将该文件夹下的所

利用xcopy命令实现本地文件复制到远程服务器的方法_DOS/BAT

A.net use \\IP地址 密码/user:****** B.xcopy 文件 \\IP地址\ 批处理文件为backup.bat,其代码如下: ========================================================================================= net use \\192.168.1.198\ipc$ Zqf198703 /user:royalpeak xcopy g:\backup\*.* \\192.168.

删除DOS结尾符的方法_DOS/BAT

DOS结尾符:CRLF Carriage-Return Line-Feed   # 检查文件是否含有CRLF  1. file dosfile     返回CRLF  2. cat -a dosfile     返回^M    # 删除CRLF  1. vim            :set fileformat=unix  # :set ff=unix      :w        :s/^M//gc  # Linux: Ctrl+V+M Enter, AIX: Ctrl+V Ctrl+^ E

利用certutil.exe实现在批处理(bat)中嵌入exe文件的方法_DOS/BAT

利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体.图片之类二进制文件的简单方法! 实际上利用certutil.exe 把二进制文件(包括各种文件,exe可执行程序,图片,声音,mp3) 经过base64编码为文本,可以实现把这些文件嵌入到批处理代码中. ###有什么用?: 举个例子,批处理经常需要依赖其它命令行工具实现自动化脚本,如果把这些工具转成文本嵌入到代码中,贴到网上就可以直接把可用的代码发出去了.不需要上传附件. ###缺点: base64编码后的文本比原文

Windows 文件类型与打开方式定义方法_DOS/BAT

assoc:根据文件扩展名定义文件类型.可以用此命令显示或修改文件扩展名关联 例如: .bat=batfile .xls=Excel.Sheet.8 ftype:根据文件类型定义打开方式.可以用此命令显示或修改用在文件扩展名关联中的文件类型 例如: batfile="%1" %* Excel.Sheet.8="C:\Program Files\Microsoft Office\Office\EXCEL.EXE" /e 说明: Ftype的基本使用格式为:Ftype

bat批处理彻底删除0KB顽固文件或文件夹的方法_DOS/BAT

今天一同事的电脑桌面上有一个0KB的隐藏文件,死活删除不了,删除时总是提示:无法删除文件,无法读取源文件或磁盘.很是奇怪,是中毒吧,我看又不像,杀毒软件也查不出什么毒,为了这事重装系统实在不值,经过研究,问题最终得以解决,拿来分享下. 1.将下面代码复制到记事本中,并另存为.bat文件,如HTMer_Del.bat(记事本保存为.bat文件的方法:记事本在另存为的时候选择"保存类型"为"所有文件",文件名的扩展名为.bat) 复制代码 代码如下: @ECHO OFF