无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5320|回复: 22
打印 上一主题 下一主题

[已解决] 批处理如何判断文件夹是否为空 为空则删除

[复制链接]
跳转到指定楼层
1#
发表于 2023-3-4 16:51:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 whyme22 于 2023-3-6 09:47 编辑

[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

在此感谢读到这的网友们,请知道答案的朋友不吝赐教.谢谢
2#
发表于 2023-3-4 17:19:25 | 只看该作者
本帖最后由 scq330 于 2023-3-4 17:22 编辑

百度的答案:

批处理判断文件夹是否为空:

set dn=ABC
dir/a/b %dn%\|findstr . nul&&(N)||(M)

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

点评

感谢解答疑惑 测试了一下好像可以了 之前测试把 M 和 N 对应的判断结果弄反了 再次感谢  详情 回复 发表于 2023-3-4 17:59
感谢解答 提问前也百度到了这个 依葫芦画瓢 把最后一句>nul&&(echo NoEmpty)||(echo Empty) 改为>nul&&(echo NoEmpty)||(rd /q /s D:\abc) 但是运行后发现 即使存在5.0 6.0 7.0的情况下 都把abc删除了 没有基础  详情 回复 发表于 2023-3-4 17:29

评分

参与人数 1无忧币 +5 收起 理由
whyme22 + 5

查看全部评分

回复

使用道具 举报

3#
发表于 2023-3-4 17:22:19 | 只看该作者
rd d:\123就可以了

点评

感谢解答 主要问题是要先判断 abc是否为空 才确定后面是删除abc建立123 还是只建立efg  详情 回复 发表于 2023-3-4 17:32
回复

使用道具 举报

4#
 楼主| 发表于 2023-3-4 17:29:39 | 只看该作者
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删除了
没有基础知识 后面的解释看的不是很明白
回复

使用道具 举报

5#
 楼主| 发表于 2023-3-4 17:32:54 | 只看该作者

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

点评

从rd的结果就可以判断是否为空了。  详情 回复 发表于 2023-3-6 10:26
回复

使用道具 举报

6#
 楼主| 发表于 2023-3-4 17:59:05 | 只看该作者
scq330 发表于 2023-3-4 17:19
百度的答案:

批处理判断文件夹是否为空:

感谢解答疑惑 测试了一下好像可以了 之前测试把 M 和 N 对应的判断结果弄反了
再次感谢
回复

使用道具 举报

7#
发表于 2023-3-4 18:02:04 | 只看该作者
学习
回复

使用道具 举报

8#
发表于 2023-3-4 18:15:40 | 只看该作者
删除指定目录下所有空文件夹:
@echo off
for /f "delims=" %%a in ('dir /ad /b /s C:\^|sort /r') do (
  rd "%%a">nul 2>nul &&echo 空目录"%%a"成功删除!
)
pause

点评

谢谢分享经验  详情 回复 发表于 2023-3-6 09:48
回复

使用道具 举报

9#
发表于 2023-3-4 18:18:21 | 只看该作者
进来学习
回复

使用道具 举报

10#
发表于 2023-3-4 18:20:33 | 只看该作者
之前分区调整脚本判断分区是否非空时写的,判断nofiles的值是否大于2,经过大量测试。格式化分区后只建立一个空文件夹,值是3,只格式化,值是1,建立后再删除,值是2。

弊端是,如果根目录有几十上百万文件会异常缓慢。
即使根目录只有一个空文件夹也认为分区非空
不考虑数据隐藏在回收站和System Volume Information文件夹的情况

刚测试了一下,对文件夹也能用。
  1.         rem 检测分区是否存在数据
  2.         for /f "tokens=1,2" %%a in ('dir D:\ /a 2^>nul ^| find "个"') do (
  3.                 if "%%b"=="个文件" set /a nofiles+=%%a
  4.                 if "%%b"=="个目录" set /a nofiles+=%%a
  5.         )
复制代码


点评

谢谢分享经验  详情 回复 发表于 2023-3-6 09:49
回复

使用道具 举报

11#
发表于 2023-3-4 19:40:54 | 只看该作者
谢谢各位大佬分享
回复

使用道具 举报

12#
发表于 2023-3-4 22:16:00 | 只看该作者
进来学习
回复

使用道具 举报

13#
发表于 2023-3-4 23:23:56 | 只看该作者
回复

使用道具 举报

14#
发表于 2023-3-4 23:45:14 | 只看该作者
okb,删除
回复

使用道具 举报

15#
发表于 2023-3-5 00:18:59 | 只看该作者
看这个行吗?

空文件夹删除工具V1.3汉化绿色版.zip

162.59 KB, 下载次数: 11, 下载积分: 无忧币 -2

点评

谢谢分享资源  详情 回复 发表于 2023-3-6 09:48
回复

使用道具 举报

16#
发表于 2023-3-5 10:38:35 | 只看该作者
我把楼主的问题直接写给AI了
AI和我的思路好像差不多,原来我就是AI
You
写windows批处理的问题
情况是这样的 安装一个软件的不同版本 会在一个文件夹下生成不同的文件夹
比如在 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

ChatGPT
您可以使用以下代码来实现:

@echo off

set "folder=D:\abc"

set "empty=true"
for /d %%f in ("%folder%\*") do (
  set "empty=false"
)

if %empty%==true (
  rem 删除文件夹abc
  rmdir "%folder%"
  rem 创建D:\123文件夹
  mkdir "D:\123"
) else (
  rem 创建D:\efg文件夹
  mkdir "D:\efg"
)
首先,将您想要判断的文件夹路径保存在变量folder中。然后,我们将empty变量设置为true,以便用于检查文件夹是否为空。
我们接着使用for循环遍历该路径下所有子文件夹,并且如果找到任何一个非空文件夹,则将empty变量设置为false。
最后,我们使用if语句来根据empty变量的值分别执行不同的操作:当empty变量的值为true时,删除文件夹并创建新文件夹;否则,直接创建新的文件夹。
请注意,在代码中,我使用了与您示例相同的文件夹名称和路径。如果您的实际情况略有不同,请相应地更改代码。


点评

谢谢分享答案 最近看ChatGPT内卷程序员的新闻 原来可以这么用 看来AI确实挺强大 感谢大佬分享经验  详情 回复 发表于 2023-3-6 09:52
回复

使用道具 举报

17#
 楼主| 发表于 2023-3-6 09:48:38 | 只看该作者
Metest 发表于 2023-3-4 18:15
删除指定目录下所有空文件夹:
@echo off
for /f "delims=" %%a in ('dir /ad /b /s C:\^|sort /r') do (
...

谢谢分享经验
回复

使用道具 举报

18#
 楼主| 发表于 2023-3-6 09:48:55 | 只看该作者

谢谢分享资源
回复

使用道具 举报

19#
 楼主| 发表于 2023-3-6 09:49:21 | 只看该作者
nttwqz 发表于 2023-3-4 18:20
之前分区调整脚本判断分区是否非空时写的,判断nofiles的值是否大于2,经过大量测试。格式化分区后只建立一 ...

谢谢分享经验
回复

使用道具 举报

20#
 楼主| 发表于 2023-3-6 09:52:23 | 只看该作者
江南一根葱 发表于 2023-3-5 10:38
我把楼主的问题直接写给AI了
AI和我的思路好像差不多,原来我就是AIYou写windows批处理的问题
情况是这样 ...

谢谢分享答案 最近看ChatGPT内卷程序员的新闻 原来可以这么用 看来AI确实挺强大 感谢大佬分享经验
回复

使用道具 举报

21#
发表于 2023-3-6 10:14:14 | 只看该作者
rd 配合 errorlevel 应该就可以
回复

使用道具 举报

22#
发表于 2023-3-6 10:26:27 | 只看该作者
whyme22 发表于 2023-3-4 17:32
感谢解答 主要问题是要先判断 abc是否为空 才确定后面是删除abc建立123 还是只建立efg

从rd的结果就可以判断是否为空了。
回复

使用道具 举报

23#
发表于 2024-10-23 13:31:42 | 只看该作者
“[已解决]”,楼主明示分享以下哪一个是正确的答案,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-26 04:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表