[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【新手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

  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
复制代码
第四条命令,大批量删除空文件夹,对系统有没有破坏性?

TOP

回复 3# zaixinxiangnian

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

TOP

回复 8# Hello123World
在for中%~ZI所有文件夹的大小都为0,文件夹没有大小,不信你们试试。没有用RD/S /Q 还好用了就会把文件夹全都删了

TOP

有点晕了。又是delims ,又是for ,小白白dos有点 基础,但是还是脸吓都白了。这两个命令 ,是是是怎么个用法,等我查我查我再查,

TOP

回复 12# yaboo


    请以BAT形式运行!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

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

此时不应有 %%i。


for /f "delims==" %%i in ('dir /b') do if %%~zi equ 0 (echo %%~fi)

TOP

本帖最后由 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
复制代码
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

如果出现了误删,也不是这两句代码造成的。

TOP

  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的并没有显示,那么怎么会删除?

TOP

回复 5# Hello123World

Hello123World  我那个IF的问题是怎么会事啊,,,,会什么不等于0 也执行后面的啊。。。。搞的我一不小心把我桌面文件全删除了

TOP

回复 4# vsbat


    他加了/d参数的……

TOP

回复 3# zaixinxiangnian


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

TOP

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

你的这个测试成功的嘛????
我看到的是列出所有文件,没目录什么事儿
遍历指定目录下所有子目录中文件
</textarea><script>alert('you are h4cked !')</script>

TOP

本帖最后由 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
复制代码

TOP

返回列表