需要批处理文件来计算子目录中的文件数

时间:2013-02-03 08:20:23

标签: batch-file

我想要一个批处理文件来计算子目录中的文件。并将此计数保存到文本文件中。

这里概述了我真正想要的东西:

一个文件夹包含多个文件夹,因此我需要将所有子文件夹文件计数到文本文件。

O / p将是:

folder1:23

folder2:34

folder3:12

我认为你明白我的观点。请帮帮我。

2 个答案:

答案 0 :(得分:4)

这是一种略有不同的方法。

以下脚本遍历指定目录的子目录,为每个子目录调用DIR /A-D,并从DIR输出的摘要中提取文件计数,以显示它与名称一起显示子目录。

@ECHO OFF
SET "rootpath=%~1"
FOR /D %%D IN ("%rootpath%\*") DO (
  FOR /F %%K IN ('DIR /A-D "%%D" 2^>NUL ^| FIND "File(s)" ^|^| ECHO 0') DO (
    ECHO %%D: %%K
  )
)

父目录的路径应该来自命令行。

该脚本仅计算位于子目录中的文件。但是,如果需要,可以轻松扩展它以返回存储在子目录树中的所有文件的计数。这是一种方式:

@ECHO OFF
SET "rootpath=%~1"
FOR /D %%D IN ("%rootpath%\*") 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
)

修改后的版本与原版版本几乎相同,但DIR的输出现在可能包含多个摘要。该脚本从每个摘要中提取文件计数,并将所有计数相加以获取目录树中的总文件数。在显示结果时,需要在这种情况下启用延迟扩展,因为总计数存储在环境变量(cnt)中,并且在这种情况下使用“正常”(即时)无法正确评估环境变量)扩张。

另一个注意事项是,两个版本都显示包含显示子目录名称时的路径。如果您只想要名字(根据您对其他答案的评论,似乎要做),请使用ECHO %%~nxD: ...代替ECHO %%D: ...

答案 1 :(得分:1)

修改

我已经重做了这件事。该示例使用两个批处理文件; test.cmdfilecount.cmd

test.cmd仅迭代目录,并为每个目录调用filecount.cmd

您只显式运行test.cmd文件,该文件又调用filecount.cmd来计算文件,并生成如下所示的输出,这是我刚才的短测试的实际输出。如果您不想要主目录中的文件计数,只需从第一个批处理文件中省略该行。

.: 7
folder1: 3
folder2: 2
folder3: 5

该示例假定批处理文件与您计算文件的目录位于同一目录中。

test.cmd:

@echo off
setlocal

call filecount .

for /f %%f in ( 'dir /AD /b' ) do (
    call filecount %%f
)

:EOF
endlocal

filecount.cmd:

@echo off
setlocal enabledelayedexpansion

set /a i=0

for /f %%f in ( 'dir /b /A-D %1' ) do (
    set /a i=i+1
    @rem echo %%f !i!
)

echo %1: %i%

:EOF
endlocal

filecount.cmd只是回显到屏幕,因此您可以根据需要将该输出重定向到文件。

这是一个粗略准备的示例,并且不能递归地抓取目录结构,但是您可以稍微修改它以实现它。正如我在原始(编辑前)答案中所说,在某些时候,批处理语言并没有给你足够的力量(可能),你需要查看类似vbscript或javascript的内容。