CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге

Ответить
Аватара пользователя
p1anbeer

CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге

Сообщение p1anbeer »

Добрый вечер.

есть задача Разработать и выполнить командный файл (КФ), выполняющий нахождение суммарного объема файлов, хранящихся в каталоге, имя которого задано первым параметром КФ.

Нашел на форуме такую команду:



@echo off



for /f "tokens=3" %%a in (

'dir/s/a-d/-c "%1\*"^|findstr/rxc:" *[0-9][0-9]* [^0-9 ][^0-9 ]* *[0-9][0-9]* [^0-9 ][^0-9 ]*"'

) do set "DirSize=%%a"



echo Folder: %1

echo Size : %DirSize% Bytes

pause>nul



Все вроде как работает как мне надо, но помогите разобраться как работает строка:

dir/s/a-d/-c "%1\*"^|findstr/rxc:" *[0-9][0-9]* [^0-9 ][^0-9 ]* *[0-9][0-9]* [^0-9 ][^0-9 ]*"'



а точнее все что после %1.

Заранее благодарю
Аватара пользователя
Iska

Re: CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге

Сообщение Iska »

Цитата p1anbeer:



суммарного объема файлов, хранящихся в каталоге,
CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге




Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.




Цитата p1anbeer:



Все вроде как работает как мне надо, но помогите разобраться как работает строка:

dir/s/a-d/-c "%1\*"^|findstr/rxc:" *[0-9][0-9]* [^0-9 ][^0-9 ]* *[0-9][0-9]* [^0-9 ][^0-9 ]*"'
CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге




Вывод команды dir, которая осуществляет рекурсивный («/s») поиск файлов («/a:-d») по маске («*») в каталоге, заданном первым параметром пакетного файла («%1») и выводит числовую информацию без разделителей («/-c»), передаётся на вход команды «findstr.exe», действующей как фильтр строк.



В данном случае осуществляется поиск строк как регулярных выражений («/r») с точным совпадением («/x») по указанному шаблону («/c:»).



Шаблон состоит из простого выражения (для иллюстрации пробелы заменены на символ «_»):



Код:

Код: Выделить всё

_*[0-9][0-9]*_[^0-9 ][^0-9 ]*_*[0-9][0-9]*_[^0-9 ][^0-9 ]*

«_*»: произвольное количество (в том числе и нулевое) пробелов.«[0-9][0-9]*»: любая цифра, затем произвольное количество (в том числе и нулевое) цифр; данное выражение в целом используется из-за отсутствующего у «findstr.exe» квантификатора «+», означающего «предыдущий символ в количестве 1 и более раз».«_»: один пробел.«[^0-9 ][^0-9 ]*»: любой не цифровой символ, затем произвольное количество (в том числе и нулевое) не цифровых символов.«_*»: аналогично п.1.«[0-9][0-9]*»: аналогично п.2.«_»: один пробел.«[^0-9 ][^0-9 ]*»: аналогично п.4.

Вот примерный вывод команды «dir /s /-c»:


Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

 Том в устройстве E имеет метку Works
 Серийный номер тома: FC23-6674
 Содержимое папки E:\Песочница\0414
11.12.2014  01:45              .
11.12.2014  01:45              ..
09.12.2014  02:53               470 0001.cmd
09.12.2014  03:00               323 0002.cmd
11.12.2014  19:24              02
10.12.2014  23:13                 0 03
09.12.2014  12:25           3596288 far2.x86.msi
11.12.2014  01:45            390144 setup.msi
08.12.2014  15:45            542661 Рабочая копия.rar
10.12.2014  23:45                82 Результат работы.txt
               7 файлов        4529968 байт
 Содержимое папки E:\Песочница\0414\02
11.12.2014  19:24              .
11.12.2014  19:24              ..
11.12.2014  19:24                97 0001.cmd
               1 файлов             97 байт
     Всего файлов:
               8 файлов        4530065 байт
               5 папок        81670144 байт свободно







После передачи этого вывода по конвейеру на вход команды «findstr.exe» с указанным шаблоном, на выходе останутся только строки:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

               7 файлов        4529968 байт
               1 файлов             97 байт
               8 файлов        4530065 байт







Эти строки последовательно перебираются по «for /f», извлекая третий по счёту токен («tokens=3»). На последнем проходе (при разборе последней строки) будет получено искомое значение.
Аватара пользователя
p1anbeer

Re: CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге

Сообщение p1anbeer »

Цитата Iska:



Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.
CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге




в этом нет особой разницы.



благодарю за помощь вроде как разобрался что и как работает.

очень помогли.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»