我有这样的目录结构A-> B-> C,D-> E,F其中A包含B文件夹和一些文本文件,sql文件,日志文件等.B包含C文件夹和许多其他扩展文件。 类似地,E,F也是子目录并包含一些文件。 现在输出应该是这样的: 文件数量: A-10 A / B-15 A / B / C-20 d-25 d / E-30 F-12 感谢您的回复。感谢所有方法。
尝试过:
@ECHO OFF
SET "rootpath=%~1"
FOR /D %%D IN ("%~dp0*") DO (
SET cnt=0
FOR /F %%K IN ('DIR /A-D /S "%%D" 2^>NUL ^| FIND "File(s)" ^|^| ECHO 0') DO ( SET /A cnt+=%%K )
SETLOCAL EnableDelayedExpansion
ECHO %%D: !cnt!
ENDLOCAL
pause
)
答案 0 :(得分:1)
您需要一个遍历整个树的递归子例程,并在每个子文件夹中执行相同的计算。这种方法更简单:
编辑:修改了代码以避免子文件夹名称包含空格时出错。
@echo off
setlocal EnableDelayedExpansion
set "base=%cd%\"
rem Accumulate files in the same array element given by its folder
for /R %%a in (*.*) do (
set "folder=%%~DPa"
set "folder=!folder:%base%=!"
set /A "count[!folder: =_!]+=1" 2> nul
)
rem Show the result
for /F "tokens=2,3 delims=[]=" %%a in ('set count[') do (
echo %%a-%%b
)
有关批处理文件中阵列管理的进一步说明,请参阅:Arrays, linked lists and other data structures in cmd.exe (batch) script