首页 > 解决方案 > 如何通过批处理计算一组文件夹中的所有子文件夹?(不是文件!)

问题描述

我有一组文件夹,比如说 1000+。每个文件夹都有一个随机名称,其中包含 2 到 300 个子文件夹。我想计算这些子文件夹,并以如下方式将它们回显到输出文件:

"Folder 1 - 22 subfolders
Folder 2 - 5 subfolders
Folder 3 - 16 subfolders
folder 4 - 198 subfolders
...
folder 1000 - 3 subfolders"

但是我对这种完全不可读的 BATCH 语法感到很困惑。这是我尝试过的:

for /d %%a in (*) do (      :: for /d(irectory) %%a in (set of folders with any name available) do (
    echo %%a>>output.txt    :: first "echo" the name of the folder into output.txt
    for /s %%b in (%%a) do  :: then do internal for to list throughout the sub-folders: /s should have meant /s(ubdirectories), %%b is the second variable to list the subdirectories itself, %%a should have meant the name of the current folder (Folder 1, Folder 2, Folder 3 etc.) or path to it, doesn't really matter
        count = count+1   ::increase count number by 1
        echo %count%>>output.txt ::echo counted value into output.txt

根本不工作

for /d %%a in ('dir /b /s %folder%^|find /c /v ""') 设置 count=%%a echo %count% folder(s^)>> output.txt

呼应多个子文件夹的共同点,不分不同文件夹。

我究竟做错了什么?我怎样才能完成我的任务?

标签: windowsbatch-filecmd

解决方案


你很接近,但有些细节不正确。

  • 由于您在循环中使用变量,因此您需要SETLOCAL EnableDelayedExpansion, 并将这些变量引用为!MYVARIABLE!
  • 要进行数学计算,请使用SET /A
  • 内部循环也应该有/d开关,因为您正在处理目录
  • ()在内部循环中使用大括号
  • 将count变量初始化为0
  • )缺少外循环的右大括号
setlocal enabledelayedexpansion
for /d %%a in (*) do (
    set count=0
    for /d %%b in ("%%a\*") do (
        set /a count += 1
    )
    echo %%a - !count! subfolders>> output.txt
)

推荐阅读