文件数量和每个文件夹的大小

我有以下批处理脚本,它给出了目录中每个文件夹的大小。 我需要帮助调整这个或创build一个新的脚本,所以它也给每个文件夹的文件数:

@echo off setlocal disabledelayedexpansion set "folder=%~1" if not defined folder set "folder=%cd%" for /d %%a in ("%folder%\*") do ( set "size=0" for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b" setlocal enabledelayedexpansion echo(%%~nxa # !size! endlocal ) endlocal 

所有的信息已经在内部dir命令的输出中,你只需要改变要检索的内容

 @echo off setlocal disabledelayedexpansion for %%a in ("%~f1.") do set "folder=%%~fa" for /d %%f in ("%folder%\*") do ( set /a "size=0", "files=0", "directories=0" for /f "tokens=1,3,5" %%a in (' dir /-c /a /w /s "%%~ff\*" 2^>nul ^| findstr /b /c:" " ') do if "%%~c"=="" ( set "files=%%~a" set "size=%%~b" ) else set /a "directories=%%~a/3" setlocal enabledelayedexpansion echo(%%~nxf # !size! bytes : !files! files : !directories! directories endlocal ) 

在最后加上这个cmd,它将在给定的目录中对文件进行计数

 setlocal enableextensions set count=0 for %%x in ("%folder%\*") do set /a count+=1 echo %count% endlocal 

这是低效的,因为你遍历整个目录两次。 理想情况下,您需要将两个FOR循环合并为一个,只需扫描一次目录并将大小添加到大小计数器,然后对每个循环计数+ = 1。

尝试类似*添加间距来显示我添加的内容

  set "folder=%~1" if not defined folder set "folder=%cd%" set count=0 for /d %%a in ("%folder%\*") do ( set "size=0" for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b" set /a count+=1 setlocal enabledelayedexpansion echo(%%~nxa # !size! endlocal ) echo %count% endlocal