批处理for /r的问题

for/rd:\aaa%%ain(*)do(if%%~za==0rd/s/qD:\aaa)当d:\aaa文件夹下有文件大小为零时会删除整个aaa文件夹但是,当d:\aaa... for /r d:\aaa %%a in (*) do (if %%~za==0 rd /s/q D:\aaa)
当d:\aaa文件夹下有文件大小为零时会删除整个aaa文件夹
但是,当d:\aaa文件夹下没有文件,而有另一个文件夹,就假设为bbb,
而d:\aaa\bbb文件夹下有大小为零的文件,这条命令却没有删除aaa文件夹,而是bbb文件夹,这是为什么。
写这条语句的本意是d://aaa文件夹如果大小为0就删除,因为不会判断文件夹大小,就只能判断文件大小了,然后又出现这个情况,请问如何解决
展开
 我来答
依梦琴瑶
高粉答主

2019-03-17 · 说的都是干货,快来关注
知道顶级答主
回答量:6.9万
采纳率:82%
帮助的人:1.6亿
展开全部

这是因为for /r 这个模式下,脚本是会进入到每个目录中执行读取的,那么这个时候D:\aaa就处于被占用状态,因此导致读取子目录中的文件后无法正常删除aaa。

建议您先读取,最后再进行删除。也就是跳出占用状态。

@echo off

set "var="
for /r D:\aaa %%a in (*) do (
    if %%~za==0 set var=ok
)
if defined var rd /s /q D:\aaa
pause
更多追问追答
追问

还是老毛病

追答
在运行脚本的同时,请不要打开目标目录。否则同样会处于占用状态。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式