Подсчитать количество файлов, папок и подпапок, используя пакетный файл - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь создать список всех папок в определенном месте на моем локальном диске.Код ниже подсчитывает количество файлов.Как бы я изменил его так, чтобы в подсчет входили файлы и папки, а не только файлы

@echo off
setlocal enableextensions disabledelayedexpansion

set "root=%cd%"

set "folder="
for %%r in ("%root%") do (
    set "rootDrive=%%~dr\" 
    if not defined rootDrive set "rootDrive=\\"
    for /f "delims=" %%a in ('
        dir /s /a "%%~fr.\*" 2^>nul ^| findstr /r /c:"^  " /c:"^ .*\\."
    ') do for /f "tokens=1,* delims=\" %%b in ("%%~a") do if not "%%c"=="" (
        set "folder=%%c"
    ) else if defined folder (
        for /f %%d in ("%%~a") do (
            setlocal enabledelayedexpansion
            echo(!rootDrive!!folder! : %%d
            endlocal
        )
        set "folder="
    )
) >> output.txt

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете попробовать это, это не проверено и может занять некоторое время в большой структуре каталогов :

@(For /F Delims^=^ EOL^= %%A In ('Dir/W/A-L 2^>Nul')Do @Set/A_f=_d,_d=%%A 2>Nul
    Set/A_d-=2&Call Set/P"=%CD% : %%_f%% : %%_d%%"<Nul&Echo(
    For /F Delims^=^ EOL^= %%A In ('Dir/B/S/AD-L 2^>Nul')Do @(
        For /F Delims^=^ EOL^= %%B In ('Dir/W/A-L "%%A" 2^>Nul'
        )Do @Set/A_f=_d,_d=%%B 2>Nul
        Set/A_d-=2&Call Set/P"=%%A : %%_f%% : %%_d%%"<Nul&Echo())>"output.txt"

Примечание: так как это предназначено для запускаиз текущего каталога файл output.txt будет учитываться в его собственном выходе.

[Редактировать /]

Полагаю, вы могли бы сделать то же самоевещь, использующая замедленное расширение, которое может ускорить процесс на долю.Вот модификация вышеупомянутого, которая использует отложенное расширение и только ради этого выводит вывод также в «относительном» формате:

@(For /F Delims^=^ EOL^= %%A In ('Dir/W/A-L 2^>Nul')Do @Set/A_f=_d,_d=%%A 2>Nul
Set/A_d-=2&SetLocal EnableDelayedExpansion&Echo(\ : !_f! : !_d!&EndLocal
For /F Delims^=^ EOL^= %%A In ('Dir/B/S/AD-L 2^>Nul')Do @(
    For /F Delims^=^ EOL^= %%B In ('Dir/W/A-L "%%A" 2^>Nul'
    )Do @Set/A_f=_d,_d=%%B 2>Nul
    Set/A_d-=2&Set "_a=%%A"&SetLocal EnableDelayedExpansion
    Echo(!_a:%__CD__%=\! : !_f! : !_d!&EndLocal))>"output.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...