2013-02-03 43 views
1

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

这里是概括我到底要:

一个文件夹包含文件夹的数量,所以我需要把所有的子文件夹中的文件数到文本文件。

O/P将是:

文件夹1:23

文件夹2:34

folder3:12

我觉得你有我的观点。请帮帮我。

+0

请帮帮我!!! – user2036737

回答

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之类的东西。

+0

感谢您的回复, 关闭@echo 集CURR =%CD% SETLOCAL enableDELAYedeXpansion FOR/F “令牌= * delims =” %%一个在( 'DIR/S/B /广告')做( PUSHD “%%一个” 组N = 0 FOR/F “令牌= * delims =” %%的( 'DIR/b /广告2 ^> NUL' F)做( 集/ a N + = 1 ) if!N!neq 0( echo %% a:!N!pics >>“!cur !r \ count.txt” ) ) 输出: E:\测试\文件夹1:N文件 E:\测试\文件夹1:N文件 E:\测试\文件夹1:N文件 但我想这一点: 文件夹1:N文件 文件夹2:N文件 folder3:N文件 – user2036737

+0

关闭@echo 组CURR =%CD% SETLOCAL enableDELAYedeXpansion FOR/F “令牌= * delims =” %%一个在( 'DIR/S/B /广告')做( PUSHD “%%一个” 组N = 0 FOR/F “令牌= * delims =” %%的( 'DIR/b /广告2 ^> NUL')做( 集合/ A F N + = 1 ) if!N! neq 0( echo %% a:!N!pics >>“!curr!\ count。TXT” ) ) 输出: E:\测试\文件夹1:N文件 E:\测试\文件夹1:N文件 E:\测试\文件夹1:N文件 但我想这一点: 文件夹1:N文件 folder2:N个文件 folder3:N个文件 – user2036737

+0

给我一个时刻,我会发布更新。 :-) – Craig

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: ...

相关问题