windows - 如何通过批处理计算一组文件夹中的所有子文件夹?(不是文件!)
问题描述
我有一组文件夹,比如说 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
呼应多个子文件夹的共同点,不分不同文件夹。
我究竟做错了什么?我怎样才能完成我的任务?
解决方案
你很接近,但有些细节不正确。
- 由于您在循环中使用变量,因此您需要
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
)
推荐阅读
- azure-devops - 如何在 ftp 中使用 AzureDevOps 发布 asp.net 网站
- node.js - XPath 语句不返回值,而是 true 或 false
- cron - Puppeteer headful 在本地机器上通过 cron 运行时无法启动浏览器,显示“无法打开 X 显示”
- django - Heroku 调试标志不停止 django 调试
- python - 在python中绘制分类散点图/线图
- flutter - Flutter shared_preferences 0.5.7 APP重新加载后无法获取值
- wordpress - WordPress分页上的锚链接
- ios - 如何在 UITabBar 中创建任何 ViewController 初始值?
- github - rebase合并提交后如何恢复合并?
- rest - @OneToOne 对于 Null @JoinColumn JPA 失败