来自:zip11 > 馆藏分类
配色: 字号:
cmd rd 删除目录
2018-01-24 | 阅:  转:  |  分享 
  
在win9x的年代,用deltree这个外部命令就很容解决这个问题,不过从windows2000及windowsxp之后,就取消了这个
命令(真的是很奇怪),那么现在怎么解决呢?大家可能想到用del+rd来解决这个问题。但有个问题,就是rd命令会删除您指定的目录。
例如,当前目录结构如下:D:\>attrib/s/dd:\test\.A???R?I???D:\test\1.t
xt此文件带有只读属性A??H??I???D:\test\2.txt此文件带有隐藏属性A?S???I???D:\tes
t\3.txt此文件带有系统属性H??I???D:\test1\1此目录带有隐藏属性A???R?I???D:\test
\1\4.txt此文件带有只读属性S???I???D:\test1\2此目录带有系统属性A???R?I???D:\te
st1\2\5.txt此文件带有只读属性批处理原理?如果您这么执行命令rdd:\test,那么rd会将test这个目录连同其中
的内容一起删除掉,而我们要保留test这个目录。那么怎么办呢?我们可以先用del把d:\test目录下的文件删除掉,然后再用rd把
子目录删除掉。这个批处理的内容如下,大家将如下内容保存为后缀名为.bat或者.cmd的文本文件,例如就叫deltree.bat
吧。---不包含此行---attrib-s-h-r%1\.&&del%1\./qdir%1/ad/b
/s>del.txt?for/f%%iin(del.txt)dord%%i/s/q?---不包含此行---那
么当我们需要删除test目录的时候,就这么执行"deltree.batd:\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>del.txt这里dir命令后的各参数含义如下:?/A
D显示具有指定属性的目录。从而让后面的rd命令删除这些目录/B使用空格式(没有标题信息或摘要)。避免后面的删除命令出错,因为dir
命令还会输出一些其它信息,例如“驱动器C中的卷没有标签。?卷的序列号是EE5B-D3AF”,显然这会导致rd命令出错。/S
显示指定目录和所有子目录中的文件。输出目录及文件的完整路径,便于后面rd命令删除。执行完这一行批处理后,在当前目录下会产生del
.txt文件,您执行typedel.txt,会看到如下输出:d:\test1\1d:\test1\2为什么要输出到文本文件呢?
为什么不直接把dir的结果输出给rd呢?因为dir的结果会有多行,如果一行一行写,不是太麻烦了吗?而且将来实际运用批处理的时候,我
们也无法预测目标文件夹下会有多少个子目录。将dir结果输出到文本文件,然后让rd去读不是很方便吗?批处理第三行?好,我们已经将要删
除的子目录列表输出到文本文件del.txt中了,只要使用rd命令删除这些目录就好了。但实际上rd本身没有读取文本文件的功能,我们用
for来解决这个问题。批处理执行到了最后一行:for/f%%iin(del.txt)dord%%i/s/q?%%
i是在for语句中使用的循环变量,这个变量每使用一次,就从del.txt中读取一行,作为变量值,然后for负责将这个变量传递给后
面do执行的命令中,那么for依次执行循环所形成的命令就是这样的:第一次循环rdd:\test1\1/s/q第二次循环
rdd:\test1\2/s/qgnaw0725注:关于for循环的更多解释请参考?http://www.jb51.net/
article/31284.htmhttp://www.jb51.net/article/31284.htm这里的rd参数含义如下
:/S除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。/Q安静模式,带/S删除目录树时不要求确认故障排查?
好,到此位置,deltree.bat这个批处理就删除了d:\test下的所有文件和文件夹,而无论它们带什么属性。如果大家在使用这个
批处理的过程中出现了问题,例如没有删除掉文件,那么如何进行故障排查呢?我们可以有两个checkpoint:批处理参数获取?就是考
察批处理是否正确获取了参数,也就是我们输入的目标文件夹,我们可以在批处理的最前面加一个echo%1,看看结果,就是这样:ech
o%1attrib-s-h-r%1\.&&del%1\./qgnaw0725注:批处理可以有9个参数,%
0代表批处理自己,第一个参数%1,第二个%2,……依此类推子目录输出列表?就是del.txt,您可以输入typedel.txt
,如果正常,输出的内容应该是d:\test下的所有子目录。脚本之家小编补充:其实删除文件与文件夹的命令用rd更简单与粗暴,具体的可以可以参考下面的命令:复制代码代码如下:rd/s/qf:\ddd—1—
献花(0)
+1
(本文系zip11首藏)