Board logo

标题: 【新手helloworld系列之②】rd命令练习 [打印本页]

作者: Hello123World    时间: 2011-8-21 14:16     标题: 【新手helloworld系列之②】rd命令练习

本帖最后由 Hello123World 于 2011-8-21 17:35 编辑

有毒药就有解药,有解药就有毒药,没有毒药就没有解药,没有解药就没有毒药。
看着是不是有点晕?
嘿嘿,其实我真正要说的很简单:如果md是毒药那么rd就是解药,如果md是解药那么rd就是毒药,如果md不是毒药那么rd就不是解药,如果md不是解药那么rd就不是毒药。
(某读者:晕,更晕了……)

rd,也做rmdir,全英文remove directory,remove=移除,directory=目录

rd教程:http://bbs.bathome.net/viewthread.php?tid=3340&highlight=rd

教程的补充:rd是remove directory的缩写,不是remake directory的缩写。(nj大大之所以把r理解为remake,我猜是在md的m基础上做出了自己的判断,但remake只有“重制做”的意思,并没有“删除、移除”的意思。)

rd练习要求:
1.需要自己创建目录供rd删除(如果运用md这将会是一件很轻松的事)
2.没有做特殊说明的情况,只能用rd且只能用一个rd完成练习。

rd练习目的:
1.熟练掌握光杆rd命令的特性
2.掌握s、q参数(思考:如果没有s,q有存在的意义吗?)

rd练习:
1.自己任意新建3个文件夹,重命名,用rd删除
2.删除c盘名为“hello world”的目录(先创建)
3.删除非空目录一个(目录中含有2个以上的文件或文件夹),需要自己创建
4.删除c盘下的所有空文件夹(如果在该文件夹中含有空的文件夹,也把这个文件夹看成是空的),此处可以用for
作者: raymai97    时间: 2011-8-21 14:40

呵呵~ 我再试试看吧~ 新手忽视~

如果是自己事先创建,基本上rd /q /s通杀

问题1:
  1. rd /q /s abc def ghi
复制代码
问题2:
  1. rd /q /s "C:\hello world"
复制代码
问题3:
  1. rd /q /s bathome
复制代码
问题4:
  1. for /d %%i in (C:\*) do rd "%%i"
复制代码

作者: zaixinxiangnian    时间: 2011-8-21 20:06

本帖最后由 zaixinxiangnian 于 2011-8-21 20:20 编辑
  1. md c:\1;c:\2;c:\3
  2. rd /s /q c:\1 c:\2 c:\3
复制代码
  1. md c:\"hello world"
  2. rd /s /q c:\"hello world"
复制代码
  1. md c:\"hello world"
  2. md c:\"hello world"\1 c:\"hello world"\2
  3. rd /s /q c:\"hello world"
复制代码
  1. md c:\1;c:\2;c:\3
  2. for /f "delims==" %%i in ('dir /b /s') do if %%~zi equ 0 (rd  %%i)
复制代码
新手,望高手指点,做本题时遇到2处问题
1.想通过MD 1 2 3 建后,然后复制1到3来达到删除非空文件的目的,但怎么也不能复制文件夹本身?
  1. [,@echo off
  2. [code]md 1 2 3
  3. pause
  4. xcopy c:\1 c:\3 /s(不能把文件夹1复制到文件夹3 )
  5. pause
  6. rd /q /s 1 2 3
复制代码
2 IF中执行不成功也运行后面的不知道为什么?
错误代码1
  1. md c:\1;c:\2;c:\3
  2. for /f "delims==" %%i in ('dir /b') do if %%~zi equ 0 (rd /s /q %%i)
复制代码
错误代码2
  1. (for /f "delims==" %%i in ('dir /b') do set val=%%~zi&setlocal enabledelayedexpansion&if "!val!" equ "0" (rd /s/q %%i))
  2. pause
复制代码

作者: vsbat    时间: 2011-8-21 22:51

我想问问
for /d %%i in (C:\*) do rd "%%i"

你的这个测试成功的嘛????
我看到的是列出所有文件,没目录什么事儿
遍历指定目录下所有子目录中文件
作者: Hello123World    时间: 2011-8-22 13:26

回复 3# zaixinxiangnian


    1.这是xcopy的特性,不复制第一层根目录,所以我一般要完全复制一个文件夹c:\hello到d,我会这么写
  1. md d:\hello
  2. xcopy /e /y c:\hello d:\hello
复制代码
2.再测试一次看看,将s q 参数去掉(安全),删除空目录用不着他们。
作者: Hello123World    时间: 2011-8-22 13:27

回复 4# vsbat


    他加了/d参数的……
作者: zaixinxiangnian    时间: 2011-8-22 15:22

回复 5# Hello123World

Hello123World  我那个IF的问题是怎么会事啊,,,,会什么不等于0 也执行后面的啊。。。。搞的我一不小心把我桌面文件全删除了
作者: Hello123World    时间: 2011-8-22 17:44

  1. @echo off
  2. for /f "delims==" %%i in ('dir /b') do if %%~zi equ 0 (echo %%~fi)
  3. pause
  4. for /f "delims==" %%i in ('dir /b /s') do if %%~zi equ 0 (echo  %%~fi)
  5. pause
复制代码
因该不会啊,这两句都是显示大小等于0的文件夹、文件,不等于0的并没有显示,那么怎么会删除?
作者: Hello123World    时间: 2011-8-22 17:46

如果出现了误删,也不是这两句代码造成的。
作者: keiamy    时间: 2012-3-19 10:05

本帖最后由 keiamy 于 2012-3-24 09:29 编辑

水平有限,想了很久,实在是找不到好方法,代码效率不高,希望版主或高手可以指点一下哦"
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in ('dir /b /s /ad-h c:\') do (
  3. set "str=%%i"&set n=0
  4. call :lp
  5. set "n=0!n!"&echo !n:~-2!.%%i
  6. ))>tmp.txt
  7. for /f "tokens=1* delims=." %%i in ('sort /r tmp.txt') do (rd "%%j" 2>nul&&set /a x+=1)
  8. echo 共删除了 %x% 个空资料夹
  9. del tmp.txt
  10. pause&exit /b
  11. :lp
  12. set "str=%str:*\=%"
  13. if "%str%"=="%str1%" goto :eof
  14. set "str1=%str%"
  15. set /a n+=1
  16. goto lp
复制代码

作者: yaboo    时间: 2012-7-12 21:26

删除C盘下所有的空文件,从大家的回答中找了几条命令试试看,都没成。运行这条命令时,提醒

此时不应有 %%i。


for /f "delims==" %%i in ('dir /b') do if %%~zi equ 0 (echo %%~fi)
作者: cjiabing    时间: 2012-7-19 14:43

回复 12# yaboo


    请以BAT形式运行!~
作者: 风之舞者    时间: 2013-8-26 17:33

有点晕了。又是delims ,又是for ,小白白dos有点 基础,但是还是脸吓都白了。这两个命令 ,是是是怎么个用法,等我查我查我再查,
作者: lifei259    时间: 2013-11-30 14:03

回复 8# Hello123World
在for中%~ZI所有文件夹的大小都为0,文件夹没有大小,不信你们试试。没有用RD/S /Q 还好用了就会把文件夹全都删了
作者: lifei259    时间: 2013-11-30 14:15

回复 3# zaixinxiangnian

问题一
    Xcopy /s命令是目录各子目录,不包括空目录。
问题二
FOr中%~ZI,只是查看文件大小。但是不能查文件夹大小
想看要看文件夹大小,用FOR 命令提取‘dir /s' 中的总节数。
作者: impk    时间: 2019-9-1 11:55

  1. @echo off
  2. ::第一题
  3. md 1 2 3 & ren 1 11 & ren 2 22 & ren 3 33
  4. ::第二题
  5. md c:\"hello world" & rd c:\"hello world"
  6. ::第三题
  7. md c:\c\1 & md c:\c\2 & rd /s/q c:\c
  8. ::第四题
  9. for /d %%i in ( c:\* ) do rd %%i
  10. pause
复制代码
第四条命令,大批量删除空文件夹,对系统有没有破坏性?




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2