2016-09-09 13 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

これは、すべてのファイルをカウントし、すべてのディレクトリは、出力がs.th.に見える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 

から始まるrecursivlyこのように:

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

ここでは、再帰を使用するアプローチがあります。

sysアドミニストレーションではなくプログラミングから来ています。引数としてフォルダをとり、そのフォルダ内のファイル番号をグローバル変数に合計し、各サブフォルダに対して自分自身を呼び出す関数(バッチ相当品は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の :)をもたらすかもしれません。

関連する問題