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

[文件操作] 【已解决】批处理怎样判断空文件夹并删除?

本帖最后由 林小七 于 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,难道这个命令能把有子目录的目录排在上面去??然后渐级递减?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
活着就是为了改变世界

是的,对 sort /r 来说,"盘符:\目录\子目录" 大于 "盘符:\目录",所以排序后会先删除一个目录中最深层的子目录,再删除其父目录(假如为空)
1

评分人数

TOP

回复 2# CrLf


    原来真的是这样 啊,就是从最里往外逐层删除,最后用用那个2>nul屏蔽删错不掉的错误提示...才知道sort...哎,我差的太多了
活着就是为了改变世界

TOP

本帖最后由 林小七 于 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     方便了。还要继续努力了,谢谢前辈指点了
活着就是为了改变世界

TOP

...手贱在rd后面加了 /s,顿时哭了..
活着就是为了改变世界

TOP

回复 2# CrLf
  1. if not exist "%%a\*" rd /s /q "%%a"
复制代码
为什么这句无法判断文件夹啊??
活着就是为了改变世界

TOP

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

你的意图应该是想判断%%a文件夹是否为空文件夹

TOP

回复 7# apang
  1.   if not exist "%%a\*.*" rd /s /q "%%a"
复制代码
这么写还是不行??为什么呢??
活着就是为了改变世界

TOP

回复 8# 林小七


    因为CMD的能够识别语法跟你自己拍脑袋想出来的语法不一样

TOP

回复 8# 林小七
  1. dir /b abc\|findstr .>nul&&echo 非空||echo 空
复制代码
判断abc文件夹是否为空
1

评分人数

TOP

回复 8# 林小七


    cmd 在通配匹配文件夹的时候显得比较怪异,可能是因为各种保留名(比如 . .. con nul 等等)造成的干扰吧?具体原因不知道

TOP

回复 10# apang


    这句更厉害
活着就是为了改变世界

TOP

回复 11# CrLf

好吧
活着就是为了改变世界

TOP

返回列表