Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге

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

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

@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.
Заранее благодарю

Отправлено: 19:10, 11-12-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

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

Код: Выделить весь код
 Том в устройстве E имеет метку Works
 Серийный номер тома: FC23-6674

 Содержимое папки E:\Песочница\0414

11.12.2014  01:45    <DIR>          .
11.12.2014  01:45    <DIR>          ..
09.12.2014  02:53               470 0001.cmd
09.12.2014  03:00               323 0002.cmd
11.12.2014  19:24    <DIR>          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    <DIR>          .
11.12.2014  19:24    <DIR>          ..
11.12.2014  19:24                97 0001.cmd
               1 файлов             97 байт

     Всего файлов:
               8 файлов        4530065 байт
               5 папок        81670144 байт свободно

После передачи этого вывода по конвейеру на вход команды «findstr.exe» с указанным шаблоном, на выходе останутся только строки:
Скрытый текст
Код: Выделить весь код
               7 файлов        4529968 байт
               1 файлов             97 байт
               8 файлов        4530065 байт

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

Последний раз редактировалось Iska, 11-12-2014 в 20:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:54, 11-12-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными. »
в этом нет особой разницы.

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

Отправлено: 20:37, 11-12-2014 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - нахождение суммарного объема файлов, хранящихся в каталоге

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименование файлов в каталоге flower Скриптовые языки администрирования Windows 2 28-11-2013 15:00
VBS/WSH/JS - Мониторинг файлов в каталоге ugol_divana Скриптовые языки администрирования Windows 1 03-08-2013 17:15
CMD/BAT - [решено] Определение суммарного объема файлов определенного типа kelevara Скриптовые языки администрирования Windows 16 02-05-2013 20:55
Любой язык - [решено] Распределение файлов в каталоге Тишина Скриптовые языки администрирования Windows 2 26-04-2013 17:09
CMD/BAT - Нахождение суммарного объема файлов XFNeo Скриптовые языки администрирования Windows 5 11-12-2011 15:56




 
Переход