2016-09-09 99 views
1

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

@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 

回答

1

这个计算所有文件和所有目录recursivly开始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 

输出看起来某事物像这样:

files:4051 
dirs:1559 

我希望这可以帮你。

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 
1

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

它来自编程而不是系统管理;它使用一个函数(批处理等效为label),该函数将文件夹作为参数,将该文件夹中的文件编号加到全局变量中,然后为每个子文件夹调用自身(每次调用都会增加文件夹数)。

@echo off 
setlocal enableextensions, enabledelayedexpansion 

set _FOLDER="C:\Temp" 
set /a _FILES=0 
set /a _DIRS=0 

call :handle_dir %_FOLDER% 
echo Dirs: %_DIRS%, Files: %_FILES% 
goto :eof 

:handle_dir 
    set /a _DIRS=%_DIRS%+1 
    for /f %%f in ('dir /b /a:-d "%~1" 2^>nul') do (
     set /a _FILES=!_FILES!+1 
    ) 
    for /f %%f in ('dir /b /a:d "%~1"') do (
     call :handle_dir "%~1\%%f" 
    ) 
    goto :eof 

只需设置_FOLDER变量到想要的文件及子目录计数的文件夹。

:在包含吨文件和子文件夹的文件夹,它可能产生StackOverflow上 :)。

相关问题