批处理如何判断文件夹是否为空 为空则删除

查看 334|回复 20
作者:277   
   
[backcolor=rgba(211, 211, 211, 0.86)][size=1.2em]Text.
各位大佬 小白又来请教问题了
情况是这样的 安装一个软件的不同版本 会在一个文件夹下生成不同的文件夹
比如在 D:\abc中 不同版本启动时 会在这个文件夹下用版本号建立文件夹 比如
D:\abc\5.0
D:\abc\6.0
D:\abc\7.0
根据软件操作 有时候会生成一些文件在这个版本号文件夹下 有时候只是空的版本号文件夹
请问 如何判断文件夹abc 是否为空(即不包含5.0 6.0 7.0任一个文件夹 存在任意一个空的版本号文件夹为非空) 判断为空时 则删除文件夹abc 同时建立文件夹D:\123 判断为非空时 则建立D:\efg
在此感谢读到这的网友们,请知道答案的朋友不吝赐教.谢谢

文件夹, 为空, 版本号

孤山飞雪   
   
百度的答案:
批处理判断文件夹是否为空:
set dn=ABC
dir/a/b %dn%\|findstr . nul&&(N)||(M)
大致就是这样的
如果ABC不在批处理同位置需要写全路径
dir显示文件或文件夹名称
/a 无论什么属性
/b 只显示名称(即如果是空的会无显示)
| 管道命令 表示前面命令结果作为后面命令的输入
findstr 查找命令
. 表示查找任意字符
nul 因为找到了会在屏幕显示结果,不要显示
&& 和|| 都是连接命令,分别对应前面命令找到了和没找到时执行M 和N 你自己写全,我这写法是不合格的,一般简单的单个命令直接写在此处,并可省去括号,复杂的或者说很多条命令的则愿意用goto命令跳转到某标签处再执行,如要写在此处也要分行且加括号,如一行太长可在正括号后断开另起一行
孤山飞雪   
rd d:\123就可以了
孤山飞雪   

scq330 发表于 2023-3-4 17:19
百度的答案:
批处理判断文件夹是否为空:

感谢解答 提问前也百度到了这个 依葫芦画瓢 把最后一句>nul&&(echo NoEmpty)||(echo Empty)
改为>nul&&(echo NoEmpty)||(rd /q /s D:\abc)
但是运行后发现 即使存在5.0 6.0 7.0的情况下 都把abc删除了
没有基础知识 后面的解释看的不是很明白
孤山飞雪   

conlin888 发表于 2023-3-4 17:22
rd d:\123就可以了

感谢解答 主要问题是要先判断 abc是否为空 才确定后面是删除abc建立123 还是只建立efg
孤山飞雪   

scq330 发表于 2023-3-4 17:19
百度的答案:
批处理判断文件夹是否为空:

感谢解答疑惑 测试了一下好像可以了 之前测试把 M 和 N 对应的判断结果弄反了
再次感谢
孤山飞雪   
学习
孤山飞雪   
删除指定目录下所有空文件夹:
@echo off
for /f "delims=" %%a in ('dir /ad /b /s C:\^|sort /r') do (
  rd "%%a">nul 2>nul &&echo 空目录"%%a"成功删除!
)
pause
孤山飞雪   
进来学习
孤山飞雪   
之前分区调整脚本判断分区是否非空时写的,判断nofiles的值是否大于2,经过大量测试。格式化分区后只建立一个空文件夹,值是3,只格式化,值是1,建立后再删除,值是2。
弊端是,如果根目录有几十上百万文件会异常缓慢。
即使根目录只有一个空文件夹也认为分区非空
不考虑数据隐藏在回收站和System Volume Information文件夹的情况
刚测试了一下,对文件夹也能用。
[ol]        rem 检测分区是否存在数据
        for /f "tokens=1,2" %%a in ('dir D:\ /a 2^>nul ^| find "个"') do (
                if "%%b"=="个文件" set /a nofiles+=%%a
                if "%%b"=="个目录" set /a nofiles+=%%a
        )[/ol]复制代码
您需要登录后才可以回帖 登录 | 立即注册

返回顶部