CMD/BAT - Обработка массива данных, уменьшение размера файла

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

CMD/BAT - Обработка массива данных, уменьшение размера файла

Сообщение ZefRus »

Добрый день, Уважаемые форумчане.

Поставили мне интересную задачу на решение. Вроде всё сделал и всё заработало но задачу тут же усложнили ввиду того, что текстовый файл на выходе весит под 1 мег (порядка 110 тыс. строк)..



Задача была следующая:

Есть сервер хранения видео записей с камер. Пишет сервер на различные логические буквы в папку Video. В этой папке сервер создаёт подпапку с датой события и часом, в который событие произошло (к примеру 01-03-17 00, значит события происходят 1 марта с 00:00 до 01:00). Само событие представляет из себя шифрованный кусок видео и не представляет интереса (есть и есть), а вот по имени события можно понять, что за камеры (шифрованное имя камеры) и сколько событий в этой папке есть. Имя события выглядит 0._122 . Запись означает, что есть нулевое событие у камеры _122. Достаточно увидеть, что есть событие "0".



Первая версия скрипта заходит в папку каждого часа и собирает её содержимое в текстовом файле, подставляя сначала имя папки. Выглядит примерно так



01-09-17 16

0._A0

01-09-17 17

0._A0

0._A1

01-10-17 00

0._107

0._10B

01-10-17 01

0._11F

0._120




Сейчас задачу сильно усложнили: нужно, что бы в текстовик писалось только одно событие по 1 камере за сутки. Т.е., нужно создавать массив дат и смотреть есть ли одинаковые имена событий.

Может кто сможет подсказать, как можно такое реализовать средствами CMD? Ниже привожу текст рабочего скрипта.





Код:

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

@echo off
rem ver.1.1, by Zef
set logpath=S:\log
set TMPF=C:\tempF
if not exist %logpath% net use s: \\192.168.9.5\target 
if not exist %TMPF% (md %TMPF%)
if exist %logpath%\%ComputerName%_test.txt Del %logpath%\%ComputerName%_test.txt /f /q
if exist %TMPF%\listing.txt del /f /a %TMPF%\listing.txt
rem ____ START ____ 
rem цикл получения значений логических дисков
for /f "tokens=1,2 delims==:" %%i In ('
 WMIC LOGICALDISK GET Name^,VolumeSerialNumber /VALUE^|find "="
') do (
 if %%i==Name 	(
	rem переход в папку video переменной j 
	cd /d %%j:\video
	rem создание временного списка директорий в подкаталоге video переменной j
	dir /b /a:d >> %TMPF%\listing.txt
		rem цикл обработки директорий с событиями
		FOR /F "usebackq delims=" %%k in (%TMPF%\listing.txt) do (
		rem переход в директорию k с событиями
		cd /d %%j:\video\%%k  
		rem просмотр содержимого k-той папки с событиями.
		rem for /f %%m in ('dir "0.*" /b /o:e') do ( set event=%m:~-5% & echo %%k.%event% >> %logpath%\%ComputerName%_test.txt )
		for /f %%m in ('dir "0.*" /b /o:e') do ( echo %%k.%%m >> %logpath%\%ComputerName%_test.txt )
 									)
del /f /a %TMPF%\listing.txt
		)
	)
Ответить

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