有网友问我要一个探测某个文件夹下哪些子目录为空的代码,原以为用 dir 会很简单地解决掉,结果一测试,才发现原来事情并非那么简单。其间变换了几种思路,前前后后竟然花费了两个小时才把问题解决好。以下是我的解题过程:
最开始,我以为可以先用 dir /ad /b /s 来获取所有子目录的路径,然后再通过获取 "dir /a 子目录" 的输出是否为空来判断子目录是否为空,代码如下:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /ad /b /s') do (
for /f %%j in ('dir /a /b "%%i"') do if "%%j"=="" echo "%%i"下没有文件
)
pause
可是,无论我如何变换环境测试,始终不能检测到空目录,百思不得其解,于是放弃了通过检测空值来探测空目录的想法。
改成下面的代码来查看test.txt,发现dir空目录的结果占了9行(包括空行)。
@echo off
cd.>test.txt
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /a /b /s') do >>test.txt dir /a "%%i"
start test.txt
于是想到了通过探测dir结果中信息行数的方法来探测文件夹是否为空,得到如下代码:
@echo off
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /ad /b /s') do (
for /f %%j in ('dir /a "%%i"') do set /a num+=1
if !num! lss 8 echo "%%i" 下没有文件
set num=0
)
pause
至此,问题得到解决。
后来,在群里又讨论了一番,发现上面的代码还可以优化,探测文件夹目录是否为空的方案还有好几种,比如 rd 方案,copy 方案。时间关系,其中的原理暂时不多说。
[
Last edited by namejm on 2007-1-6 at 12:22 AM ]