Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Подсчет количества файлов, вывод суммы, минимального и максимального номера файла

Ответить
Настройки темы
Любой язык - [решено] Подсчет количества файлов, вывод суммы, минимального и максимального номера файла

Ветеран


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

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


Здравствуйте, не давно создавал тему по подсчету файлов http://forum.oszone.net/thread-341211.html
Нужен еще один вариант вывода для некоторых путей.. необходимо указать не только количество и сумму, но еще минимальный и максимальный номер файла.

Пример:
Я задаю в скрипте два пути и имена файлов (по маске).

C:\\test\*start*.*
C:\\krug\*aist*.*

Папки с файлами:

test
Код: Выделить весь код
0054ajsdhglsdhlg.mp4
0349dfsgdgsd.avi
0673start.avi
1673start.wmv
krug
Код: Выделить весь код
aist0005.mp3
kran.mp3
aist0024.mp3

В результате, скрипт выводит на экран пути, минимальный и максимальный номер файла, а также количество найденных файлов, а в самом низу сумму всех таких файлов

Код: Выделить весь код
C:\\test\0673 - 1673 start - 2
C:\\krug\0005 - 0024 aist - 2
4
Известно:
номер всегда четырехзначный
для одного пути номер будет либо в начале, либо в конце, т.е. если мы указали путь C:\\test\*start*.*, то по этому пути будут присутствовать другие файлы, а также файлы типа NNNNstart или startNNNN (только один какой - то вариант). Кстати, для каждого пути, мы всегда знаем где эти номера будут располагаться (в начале или конце), поэтому при необходимости мы всегда можем помечать это в скрипте

Отправлено: 04:39, 08-07-2019

 

Ветеран


Contributor


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

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


CMD1
Код: Выделить весь код
@Echo Off
cls
	Set /A N=0
	Call :NFiles "Z:\Soft_In\start\????start.*" "[0-9][0-9][0-9][0-9]start\..*" "N" "M1" 
	Call :NFiles "Z:\Soft_In\start\start????.*" "start[0-9][0-9][0-9][0-9]\..*" "N" "M2"
	Call :NFiles "Z:\Soft_In\start\start1????.*" "start1[0-9][0-9][0-9][0-9]\..*" "N" "M3"
	Echo %N%
Pause
Exit /B

:NFiles
	SetLocal
	Set /A N=0
	Set "M1="	
	Set "MN="
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir %1 /B /O:N /A:-D ^|findstr /I /R /C:"^%~2"`) DO (
		Call Set /A N+=1
		If Not Defined M1 Call Set "M1=%%a"
		Call Set "MN=%%a"		 	
	)
	If %N%==0 (Set "M1=%~nx1" &Set "MN=%~nx1")
	Echo %1 - %M1% -^> %MN% = %N% 
	EndLocal &(Set /A %~3+=%N%) &(Set %~4=%1 - %M1% -^^^> %MN% = %N%) 
Exit /B
CMD2
Код: Выделить весь код
@Echo Off
cls
	Set /A N=0
	Call :NFiles "Z:\Soft_In\start\????start.*" "[0-9][0-9][0-9][0-9]start\..*" 4 "N" "M1" 
	Call :NFiles "Z:\Soft_In\start\start????.*" "start[0-9][0-9][0-9][0-9]\..*" 4 "N" "M2"
	Call :NFiles "Z:\Soft_In\start\stagrt????.*" "stagrt[0-9][0-9][0-9][0-9]\..*" 4 "N" "M3"
	Echo %N%
Pause
Exit /B

:NFiles
	SetLocal
	Set /A N=0
	Set "Reg=%~2"
	If "%Reg:~0,5%"=="[0-9]" (Set /A Reg=1) Else (Set /A Reg=2)
	Set "M1="	
	Set "MN="
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir %1 /B /O:N /A:-D ^|findstr /I /R /C:"^%~2"`) DO (
		Call Set /A N+=1
		If Not Defined M1 Call Set "M1=%%~na"
		Call Set "MN=%%~na"		 	
	)
	If %N%==0 (Set "M1=%~n1" &Set "MN=%~n1")
	If %Reg%==1 (Call Set "M1=%%M1:~0,%3%%") Else (Call Set "M1=%%M1:~-%3%%")
	If %Reg%==1 (Call Set "MN=%%MN:~0,%3%%") Else (Call Set "MN=%%MN:~-%3%%")
	Echo %1 - %M1% -^> %MN% = %N% 
	EndLocal &(Set /A %~4+=%N%) &(Set %~5=%1 - %M1% -^^^> %MN% = %N%) 
Exit /B
CMD3
Код: Выделить весь код
@Echo Off
cls
	Set /A N=0
	Call :NFiles "Z:\Soft_In\start\????start.*" "[0-9][0-9][0-9][0-9]start\..*" 4 "N" "M1" 
	Call :NFiles "Z:\Soft_In\start\start????.*" "start[0-9][0-9][0-9][0-9]\..*" 4 "N" "M2"
	Call :NFiles "Z:\Soft_In\start\st22art????.*" "st22art[0-9][0-9][0-9][0-9]\..*" 4 "N" "M3"
	Echo %N%
Pause
Exit /B

:NFiles
	SetLocal
	Set /A N=0
	Set "Reg=%~2"
	If "%Reg:~0,5%"=="[0-9]" (Set /A Reg=1) Else (Set /A Reg=2)
	Set "M1="	
	Set "MN="
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir %1 /B /O:N /A:-D ^|findstr /I /R /C:"^%~2"`) DO (
		Call Set /A N+=1
		If Not Defined M1 Call Set "M1=%%~na"
		Call Set "MN=%%~na"		 	
	)
	If %N%==0 (Set "M1=%~n1" &Set "MN=%~n1")
	If %Reg%==1 (
		Call Set "NM1=%%M1:~%3%%"
		Call Set "M1=%%M1:~0,%3%%"
		Call Set "MN=%%MN:~0,%3%%"
	) Else (
		Call Set "NM1=%%M1:~0,-%3%%"
		Call Set "M1=%%M1:~-%3%%"
		Call Set "MN=%%MN:~-%3%%"
	)
	Echo %~dp1%M1% - %MN% %NM1% %N% 
	EndLocal &(Set /A %~4+=%N%) &(Set %~5=%~dp1%M1% - %MN% %NM1% %N%) 
Exit /B
Варианты отличаются способом представления выходной информации. Третий - как у Вас.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 08-07-2019 в 13:17.

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

Отправлено: 12:24, 08-07-2019 | #2



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

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


Ветеран


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

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


Спасибо, все три варианта запустил, выбрал один
А не подскажите, что такое "M1" "M2" "M3" ? Я везде сделал "M1", вроде как все нормально работает, или нужно обязательно поменять цифры?

Отправлено: 01:17, 10-07-2019 | #3


Ветеран


Contributor


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

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


Alexander_88, в переменных "M1" "M2" "M3" сообщения для каждого пути. По началу я хотел сделать вывод всех сообщений после вызова всех процедур, например:
Echo %M1%
Echo %M2%
Echo %M3%
Echo %N%
Но потом сделал вызов сообщений внутри процедуры, а эти переменные оставил про запас.
Естественно, если Вы везде указываете имя одной и той же переменной, например, M1, то сохранится только одно значение для последнего вызова процедуры.
Не обязательно имя переменной писать "M1" "M2" "M3", можно, например,"start" "aist" и т д. и затем
Echo %start%
Echo %aist%
либо Echo %start% %aist%
при этом Echo в процедуре можно убрать.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 07:16, 10-07-2019 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Подсчет количества файлов, вывод суммы, минимального и максимального номера файла

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Подсчет количества файлов в разных папках и вывод суммы количества Alexander_88 Скриптовые языки администрирования Windows 2 08-07-2019 03:37
Доступ - Увеличение максимального количества подключенных юзеров ReAL Microsoft Windows 7 1 17-01-2013 11:16
Разное - [решено] Выбор уникальных значений из списка, подсчет их количества и суммы Farrukhjon Microsoft Office (Word, Excel, Outlook и т.д.) 32 09-08-2012 09:16
VBS/WSH/JS - Подсчет количества ini файлов в папке XXXp Скриптовые языки администрирования Windows 14 10-04-2012 02:06
Интернет - Увеличение максимального количества сетевых подключений - как? DIMM DDR Microsoft Windows 7 6 25-01-2010 13:38




 
Переход