1

Как можно пройти через папку и ее подпапки (каталог и его подкаталоги) и перечислить, сколько файлов с определенным расширением содержится в них в общей сложности, для каждого расширения, которое встречается в этих папках?

Что-то похожее на это,

folders               48 total
.jpg                2842 total
.gif                 142 total
.CR2                2842 total

Сумма, указанная выше, должна совпадать с суммой в dir/s которой перечислены все файлы и подпапки в некоторой папке.

4 ответа4

2

Если это не обязательно командная строка, вы можете использовать WinDirStat. http://windirstat.info/download.html

1

Следующий фрагмент кода может помочь:

@ECHO OFF >NUL
SETLOCAL EnableExtensions
rem EnableDelayedExpansion
rem next line: clear/delete all `_filesTotal` environment variables
for /F "delims==" %%G in ('set _filesTotal 2^>NUL') do set "%%G="
rem next line: initialize `_foldersTotal` environment variable
set "_foldersTotal=0"
pushd "folder where count"
for /F "delims=" %%G in ('dir /B /S /A') do (
  if exist "%%~G\" (
    rem folder %%G
    set /A "_foldersTotal+=1"
  ) else (
    rem   file %%G
    if "%%~xG"=="" (set /A "_filesTotal.+=1") else (set /A "_filesTotal%%~xG+=1")
  )
)
rem next two lines: display raw results
echo %CD%
set _foldersTotal
set _filesTotal
popd

Ресурсы (требуется чтение):

0

Обход папок и подсчет файлов

Как можно пройти через папку и ее подпапки (каталог и его подкаталоги) и перечислить, сколько файлов с определенным расширением содержится в них в общей сложности, для каждого расширения, которое встречается в этих папках?

Используйте следующие 3 пакетных файла.

Заметки:

  • В настоящее время не учитываются файлы без расширения (что оказалось вне краткости вопроса).
  • Некоторые файлы могут быть подсчитаны несколько раз, если 8.3 имена не отключены.

Total.cmd:

@echo off
setlocal enabledelayedexpansion
rem count directories
call CountDirs
rem get list of extensions
for /f "usebackq" %%i in (`dir /a:-d /b /s`) do (
  set _extension=%%~xi
  if [!_extension!] neq [] echo !_extension:~1! >> %temp%\extensions 
  )
rem get list of unique extensions
set _last=
for /f "usebackq" %%j in (`sort %temp%\extensions`) do (
  set _this=%%j
  if [!_last!] neq [!_this!] echo !_this! >> %temp%\unique
  set _last=%%j
  )
rem count the files
for /f %%k in (%temp%\unique) do (
  call CountFiles %%k
  )
rem cleanup
if exist %temp%\extensions del %temp%\extensions
if exist %temp%\unique del %temp%\unique
endlocal

CountDirs.cmd:

@echo off
rem count directories
dir /a:d /b /s | find "" /c /v > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
echo folders %_count% total

CountFiles.cmd:

@echo off
rem count files matching %1
dir /b *.%1 /s 2> nul | find "" /v /c > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
echo .%1 %_count% total

Пример вывода:

F:\test>Total.cmd
folders 15 total
.1 1 total
.bat 1 total
.cmd 10 total
.csv 6 total
.exe 4 total
.html 1 total
.java 1 total
.jpg 1 total
.js 1 total
.mak 1 total
.php 1 total
.ps1 1 total
.sh 1 total
.txt 19 total
.txt1 2 total
.zip 1 total
F:\test>

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • dir - Показать список файлов и подпапок.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for /f - Циклическая команда против результатов другой команды.
  • if - Условно выполнить команду.
  • параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
0

Я призываю вас рассмотреть подход Powershell к вашему вопросу. Это немного меньше строк кода с возможностью сортировки вывода ...

$foldercount = 0
$hash = @{}
Get-ChildItem -Path "C:\Code Samples" -Recurse | ForEach-Object { 
    if ($_.Attributes -eq 'Directory') 
        { 
        ++$foldercount
        }
    else
        {
        if ($hash.ContainsKey($_.Extension)) 
            { $count = $hash.Get_Item($_.Extension); ++$count; $hash.Set_Item($_.Extension, $count) }
        else
            { $hash.Add($_.Extension, 1) } 
        }
}

Write-Host $foldercount folders
$hash.GetEnumerator() | Sort-Object Value -descending

И, производит этот вывод для моей папки с образцами ...

90 folders

Name                           Value                                                                                                                                                                                                 
----                           -----                                                                                                                                                                                                 
.tlog                          186                                                                                                                                                                                                   
.h                             72                                                                                                                                                                                                    
.obj                           56                                                                                                                                                                                                    
.cpp                           54                                                                                                                                                                                                    
.pdb                           26                                                                                                                                                                                                    
.manifest                      24                                                                                                                                                                                                    
.res                           23                                                                                                                                                                                                    
.rc                            22                                                                                                                                                                                                    
.log                           15                                                                                                                                                                                                    
.lastbuildstate                12                                                                                                                                                                                                    
.ipch                          12                                                                                                                                                                                                    
.ico                           12                                                                                                                                                                                                    
.exe                           12                                                                                                                                                                                                    
.idb                           12                                                                                                                                                                                                    
.vcxproj                       11                                                                                                                                                                                                    
.ilk                           11                                                                                                                                                                                                    
.user                          11                                                                                                                                                                                                    
.sdf                           11                                                                                                                                                                                                    
.zip                           11                                                                                                                                                                                                    
.filters                       11                                                                                                                                                                                                    
.sln                           11                                                                                                                                                                                                    
.pch                           11                                                                                                                                                                                                    
.txt                           8                                                                                                                                                                                                     
.gif                           8                                                                                                                                                                                                     
.rc2                           8                                                                                                                                                                                                     
.aps                           8                                                                                                                                                                                                     
.bmp                           7                                                                                                                                                                                                     
.dsw                           6                                                                                                                                                                                                     
.dsp                           6                                                                                                                                                                                                     
.png                           5                                                                                                                                                                                                     
.css                           5                                                                                                                                                                                                     
.html                          4                                                                                                                                                                                                     
.old                           4                                                                                                                                                                                                     
.XML                           4                                                                                                                                                                                                     
.vcproj                        4                                                                                                                                                                                                     
.xslt                          4                                                                                                                                                                                                     
.exp                           3                                                                                                                                                                                                     
.dll                           3                                                                                                                                                                                                     
.lib                           3                                                                                                                                                                                                     
.clw                           2                                                                                                                                                                                                     
.def                           2                                                                                                                                                                                                     
.opt                           2                                                                                                                                                                                                     
.ncb                           2                                                                                                                                                                                                     
.plg                           2                                                                                                                                                                                                     
.recipe                        2                                                                                                                                                                                                     
.rtf                           1                                                                                                                                                                                                     
.jpg                           1                                                                                                                                                                                                     
.h original                    1                                                                                                                                                                                                     
.bat                           1                                                                                                                                                                                                     
.js                            1                                                                                                                                                                                                     
.cpp original                  1                                                                                                                                                                                                     
.DPbcd                         1                                                                                                                                                                                                     

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .