从命令行计算文件夹和子文件夹中的文件数量

从命令行计算文件夹和子文件夹中的文件数量

如何将命令行中指定文件夹(以及可选的子文件夹)中给定类型(例如 *.mp3)的所有文件计入环境变量中?

(请不要使用 PowerShell,只需批处理命令)

答案1

set filesCount=0 & for %f in (*) do @(set /a filesCount+=1 > nul)

答案2

统计文件夹和子文件夹中的文件数量

使用以下命令:

dir /b *.mp3 /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%

环境变量%count%将包含文件数量。

笔记:

  • /s如果您不想计算子文件夹中的文件,请删除。

示例(使用 *.txt)

目录列表显示 17 个文件:

F:\test>dir /b *.txt /s
F:\test\abc.txt
F:\test\blackwhite.txt
F:\test\cpu.txt
F:\test\interface.txt
F:\test\Lorem ipsum.txt
F:\test\right.txt
F:\test\rights.txt
F:\test\software.txt
F:\test\tabs.txt
F:\test\test.txt
F:\test\this is inside junction.txt
F:\test\unique.txt
F:\test\xyz.txt
F:\test\sub\abc.txt
F:\test\sub\xyz.txt
F:\test\sub with space\junction sub with space.txt
F:\test\sub with space\xyz.txt

运行命令:

F:\test>dir /b *.txt /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
17

进一步阅读

答案3

dir使用和的组合find来计算文件数。通过for循环将文件存储到变量中。将错误输出重定向到nul以隐藏File Not Found错误。

@echo off
for /f %%i in ('dir *.xlsx /s /b 2^> nul ^| find "" /v /c') do set VAR=%%i
echo %VAR%

/?请参阅使用for dirfind和 的参数描述for

答案4

您可以利用 robocopy 的/L(list) 选项。这样您就不需要任何复杂的 for 循环或管道了。而且速度也非常快。

robocopy c:\mydir c:\dummy /L /E *.mp3 *.txt
  • c:\mydir:将其替换为您要搜索的目录的路径
  • c:\dummy:你可以保留它,它只是一个虚拟参数,由于我们正在使用,所以它会被忽略/L
  • /L:仅列出,不会复制/移动任何内容。
  • /E:递归包含子目录。如果不想搜索子目录,可以删除此项。
  • 如果您不想打印文件和目录列表,您可以添加/NFL(无文件列表)和/或/NDL(无目录列表)

您将获得如下所示的漂亮报告。只需查看该Total列即可。

Source : c:\mydir

Files : *.mp3
        *.txt

--------------------------------------------------

{list of all the matching files}

--------------------------------------------------

            Total    Copied   Skipped  Mismatch    FAILED    Extras
 Dirs :         5         5         0         0         0         0
Files :        89        89         0         0         0         0
Bytes :   3.485 g   3.485 g         0         0         0         0

相关内容