无忧启动论坛

标题: 批处理如何判断文件夹是否为空 为空则删除 [打印本页]

作者: whyme22    时间: 2023-3-4 16:51
标题: 批处理如何判断文件夹是否为空 为空则删除
本帖最后由 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

在此感谢读到这的网友们,请知道答案的朋友不吝赐教.谢谢
作者: scq330    时间: 2023-3-4 17:19
本帖最后由 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命令跳转到某标签处再执行,如要写在此处也要分行且加括号,如一行太长可在正括号后断开另起一行
作者: conlin888    时间: 2023-3-4 17:22
rd d:\123就可以了
作者: whyme22    时间: 2023-3-4 17:29
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删除了
没有基础知识 后面的解释看的不是很明白
作者: whyme22    时间: 2023-3-4 17:32
conlin888 发表于 2023-3-4 17:22
rd d:\123就可以了

感谢解答 主要问题是要先判断 abc是否为空 才确定后面是删除abc建立123 还是只建立efg
作者: whyme22    时间: 2023-3-4 17:59
scq330 发表于 2023-3-4 17:19
百度的答案:

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

感谢解答疑惑 测试了一下好像可以了 之前测试把 M 和 N 对应的判断结果弄反了
再次感谢
作者: panyf14    时间: 2023-3-4 18:02
学习
作者: Metest    时间: 2023-3-4 18:15
删除指定目录下所有空文件夹:
@echo off
for /f "delims=" %%a in ('dir /ad /b /s C:\^|sort /r') do (
  rd "%%a">nul 2>nul &&echo 空目录"%%a"成功删除!
)
pause
作者: yyz2191958    时间: 2023-3-4 18:18
进来学习
作者: nttwqz    时间: 2023-3-4 18:20
之前分区调整脚本判断分区是否非空时写的,判断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.         )
复制代码



作者: 1825208    时间: 2023-3-4 19:40
谢谢各位大佬分享
作者: 277    时间: 2023-3-4 22:16
进来学习
作者: 孤山飞雪    时间: 2023-3-4 23:23

作者: 黑中见白    时间: 2023-3-4 23:45
okb,删除
作者: vaf    时间: 2023-3-5 00:18
看这个行吗?

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

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


作者: 江南一根葱    时间: 2023-3-5 10:38
我把楼主的问题直接写给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时,删除文件夹并创建新文件夹;否则,直接创建新的文件夹。
请注意,在代码中,我使用了与您示例相同的文件夹名称和路径。如果您的实际情况略有不同,请相应地更改代码。



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

谢谢分享经验
作者: whyme22    时间: 2023-3-6 09:48
vaf 发表于 2023-3-5 00:18
看这个行吗?

谢谢分享资源
作者: whyme22    时间: 2023-3-6 09:49
nttwqz 发表于 2023-3-4 18:20
之前分区调整脚本判断分区是否非空时写的,判断nofiles的值是否大于2,经过大量测试。格式化分区后只建立一 ...

谢谢分享经验
作者: whyme22    时间: 2023-3-6 09:52
江南一根葱 发表于 2023-3-5 10:38
我把楼主的问题直接写给AI了
AI和我的思路好像差不多,原来我就是AIYou写windows批处理的问题
情况是这样 ...

谢谢分享答案 最近看ChatGPT内卷程序员的新闻 原来可以这么用 看来AI确实挺强大 感谢大佬分享经验
作者: 2010wlm    时间: 2023-3-6 10:14
rd 配合 errorlevel 应该就可以
作者: szwp    时间: 2023-3-6 10:26
whyme22 发表于 2023-3-4 17:32
感谢解答 主要问题是要先判断 abc是否为空 才确定后面是删除abc建立123 还是只建立efg

从rd的结果就可以判断是否为空了。
作者: dzxy_1    时间: 2024-10-23 13:31
“[已解决]”,楼主明示分享以下哪一个是正确的答案,谢谢!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3