Добрый вечер.
есть задача Разработать и выполнить командный файл (КФ), выполняющий нахождение суммарного объема файлов, хранящихся в каталоге, имя которого задано первым параметром КФ.
Нашел на форуме такую команду:
@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.
Заранее благодарю
CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге
-
Iska
Re: CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге
Цитата p1anbeer:
суммарного объема файлов, хранящихся в каталоге,
Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.
Цитата 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 ]*"'
Вывод команды dir, которая осуществляет рекурсивный («/s») поиск файлов («/a:-d») по маске («*») в каталоге, заданном первым параметром пакетного файла («%1») и выводит числовую информацию без разделителей («/-c»), передаётся на вход команды «findstr.exe», действующей как фильтр строк.
В данном случае осуществляется поиск строк как регулярных выражений («/r») с точным совпадением («/x») по указанному шаблону («/c:»).
Шаблон состоит из простого выражения (для иллюстрации пробелы заменены на символ «_»):
Код:
«_*»: произвольное количество (в том числе и нулевое) пробелов.«[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]
После передачи этого вывода по конвейеру на вход команды «findstr.exe» с указанным шаблоном, на выходе останутся только строки:
Скрытый текст
[spoiler]Код: [/spoiler]
Эти строки последовательно перебираются по «for /f», извлекая третий по счёту токен («tokens=3»). На последнем проходе (при разборе последней строки) будет получено искомое значение.
суммарного объема файлов, хранящихся в каталоге,
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 - нахождение суммарного объема файлов, хранящихся в каталоге
Цитата Iska:
Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.
в этом нет особой разницы.
благодарю за помощь вроде как разобрался что и как работает.
очень помогли.
Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.
CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге
в этом нет особой разницы.
благодарю за помощь вроде как разобрался что и как работает.
очень помогли.