2017-03-06 143 views
1

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

@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 
+0

递归还是仅仅是1级文件的计数?文件夹内的文件夹应该计为文件吗? – npocmaka

回答

1

所有的信息已经在内部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 
    ) 
0

末添加这个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 
相关问题