用于计算子目录中的文件的批处理文件

时间:2016-09-09 17:18:36

标签: batch-file

我想让这个批处理文件计算子目录中的文件并显示总文件和目录。但是,我不熟悉语法。

@ECHO OFF
SET "rootpath=C:\Users\RX\Documents\01.00 Meters\100\EMC\EMC 15Aug2016 Level4\res"
SET tcnt=0
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!
  tcnt+=%%cnt
  ENDLOCAL
)
ECHO !tcnt!
cmd /k

3 个答案:

答案 0 :(得分:1)

这将从rootpath

开始递归计算所有文件和所有目录
@echo off
SET rootpath=c:\temp
set cnt_files=0
set cnt_dirs=0
rem count all files in dir and subdirs
for /f %%a in ('dir /s /B /a-d "%rootpath%"') do set /A cnt_files+=1
rem count all folders in dir and subdirs
for /f %%a in ('dir /s /B /ad "%rootpath%"') do set /A cnt_dirs+=1
echo files:%cnt_files%
echo dirs:%cnt_dirs%
pause

输出结果为s.th.像这样:

files:4051
dirs:1559

我希望这能为你做到。

答案 1 :(得分:1)

这是一种使用递归的方法。

它来自编程而不是 sys admining ;它使用一个函数( batch 等价物是label),它将文件夹作为参数,将该文件夹中的文件号与全局变量相加,然后为每个子函数调用自身-folder(每次调用都会增加文件夹编号)。

_FOLDER

只需将var get_article = $('title, p, img');变量设置为您希望其文件和子目标计数的文件夹。

注意:在包含大量文件和子文件夹的文件夹中,它可能会产生 StackOverflow :)。

答案 2 :(得分:0)

这应该只提供总数:

@Echo Off
SetLocal EnableDelayedExpansion

(Set selDir=C:\Users\RX\Documents\01.00 Meters\100\EMC\EMC 15Aug2016 Level4\res)

Set i=3
For /F "EOL=- Tokens=1-3" %%I In (
    'RoboCopy /L /E /NFL /NDL /NJH "%selDir%" null *.*') Do (
    If %%J==: (Set/A i-=1
        If !i! GEq 1 Echo(%%I : %%K))
Pause

这应该给出一个输出,显示相对目录名称,后跟各自的文件计数。

@Echo Off
SetLocal

(Set selDir=C:\Users\RX\Documents\01.00 Meters\100\EMC\EMC 15Aug2016 Level4\res)

Set "i=0"
For /F "Delims=" %%I In ('Dir/B/AD/S "%selDir%"') Do (Set/A i+=1
    Set "$d=%%I"
    Call Set "$d[%%i%%]=%%$d:%seldir%\=%%"
)
Echo(
For /F "Tokens=1* Delims==" %%I In ('Set $d[') Do (Set "i=0"
    For /F "Delims=" %%K In ('Dir/B/A-D "%selDir%\%%J\*.*"2^>Nul') Do Set/A i+=1
    Call Echo( %%J : %%i%%) 
Echo(
Pause
EndLocal
Exit/B