Board logo

标题: [文件操作] 【已解决】批处理怎样判断空文件夹并删除? [打印本页]

作者: 林小七    时间: 2013-3-23 20:07     标题: 【已解决】批处理怎样判断空文件夹并删除?

本帖最后由 林小七 于 2013-3-24 22:36 编辑

我是这么写的:
  1. for /d /r %%a in (*) do (
  2. echo %%a
  3. if not exist "%%a\*" rd /s /q "%%a")
复制代码
但是删除不掉啊,百度了下,发现了一个
  1. 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

这么说。这样也行喽...
  1. for /d /r %%a in (*) do (
  2.         echo %%a>>1.txt)
  3. for /f %%s in ('sort /r^<1.txt') do (
  4.         rd  /q "%%s" 2>nul)
复制代码
就是好麻烦 啊,不如dir /s /ad /b     方便了。还要继续努力了,谢谢前辈指点了
作者: 林小七    时间: 2013-3-23 23:06

...手贱在rd后面加了 /s,顿时哭了..
作者: 林小七    时间: 2013-3-24 10:22

回复 2# CrLf
  1. if not exist "%%a\*" rd /s /q "%%a"
复制代码
为什么这句无法判断文件夹啊??
作者: apang    时间: 2013-3-24 11:29

回复 6# 林小七
  1.   if not exist "%%a\*" rd /s /q "%%a"
复制代码
这句是判断%%a文件夹本身是否存在。如果不存在%%a文件夹,就删除%%a文件夹,逻辑上就不对。

你的意图应该是想判断%%a文件夹是否为空文件夹
作者: 林小七    时间: 2013-3-24 17:30

回复 7# apang
  1.   if not exist "%%a\*.*" rd /s /q "%%a"
复制代码
这么写还是不行??为什么呢??
作者: BAT-VBS    时间: 2013-3-24 18:25

回复 8# 林小七


    因为CMD的能够识别语法跟你自己拍脑袋想出来的语法不一样
作者: apang    时间: 2013-3-24 18:58

回复 8# 林小七
  1. 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://bbs.bathome.net/) Powered by Discuz! 7.2