标题: [文件操作] 【已解决】批处理怎样判断空文件夹并删除? [打印本页]
作者: 林小七 时间: 2013-3-23 20:07 标题: 【已解决】批处理怎样判断空文件夹并删除?
本帖最后由 林小七 于 2013-3-24 22:36 编辑
我是这么写的:- for /d /r %%a in (*) do (
- echo %%a
- if not exist "%%a\*" rd /s /q "%%a")
复制代码
但是删除不掉啊,百度了下,发现了一个- for /f "tokens=*" %%a in ('dir /b /ad /s^|sort /r') do rd "%%a" 2>nul
复制代码
很神奇,我就分开试了试,dir /ad /b /s是显示所有目录,sori /r是倒叙a-z,0-9,排成z-a,9-0,难道这个命令能把有子目录的目录排在上面去??然后渐级递减?
作者: CrLf 时间: 2013-3-23 22:13
是的,对 sort /r 来说,"盘符:\目录\子目录" 大于 "盘符:\目录",所以排序后会先删除一个目录中最深层的子目录,再删除其父目录(假如为空)
作者: 林小七 时间: 2013-3-23 22:41
回复 2# CrLf
原来真的是这样 啊,就是从最里往外逐层删除,最后用用那个2>nul屏蔽删错不掉的错误提示...才知道sort...哎,我差的太多了
作者: 林小七 时间: 2013-3-23 22:48
本帖最后由 林小七 于 2013-3-23 23:05 编辑
回复 2# CrLf
这么说。这样也行喽...- for /d /r %%a in (*) do (
- echo %%a>>1.txt)
- for /f %%s in ('sort /r^<1.txt') do (
- rd /q "%%s" 2>nul)
复制代码
就是好麻烦 啊,不如dir /s /ad /b 方便了。还要继续努力了,谢谢前辈指点了
作者: 林小七 时间: 2013-3-23 23:06
...手贱在rd后面加了 /s,顿时哭了..
作者: 林小七 时间: 2013-3-24 10:22
回复 2# CrLf - if not exist "%%a\*" rd /s /q "%%a"
复制代码
为什么这句无法判断文件夹啊??
作者: apang 时间: 2013-3-24 11:29
回复 6# 林小七 - if not exist "%%a\*" rd /s /q "%%a"
复制代码
这句是判断%%a文件夹本身是否存在。如果不存在%%a文件夹,就删除%%a文件夹,逻辑上就不对。
你的意图应该是想判断%%a文件夹是否为空文件夹
作者: 林小七 时间: 2013-3-24 17:30
回复 7# apang - if not exist "%%a\*.*" rd /s /q "%%a"
复制代码
这么写还是不行??为什么呢??
作者: BAT-VBS 时间: 2013-3-24 18:25
回复 8# 林小七
因为CMD的能够识别语法跟你自己拍脑袋想出来的语法不一样
作者: apang 时间: 2013-3-24 18:58
回复 8# 林小七 - dir /b abc\|findstr .>nul&&echo 非空||echo 空
复制代码
判断abc文件夹是否为空
作者: CrLf 时间: 2013-3-24 20:41
回复 8# 林小七
cmd 在通配匹配文件夹的时候显得比较怪异,可能是因为各种保留名(比如 . .. con nul 等等)造成的干扰吧?具体原因不知道
作者: 林小七 时间: 2013-3-24 22:35
回复 10# apang
这句更厉害
作者: 林小七 时间: 2013-3-24 22:35
回复 11# CrLf
好吧
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |