Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Обработка массива данных, уменьшение размера файла (http://forum.oszone.net/showthread.php?t=331977)

ZefRus 18-12-2017 11:08 2785148

Обработка массива данных, уменьшение размера файла
 
Добрый день, Уважаемые форумчане.
Поставили мне интересную задачу на решение. Вроде всё сделал и всё заработало но задачу тут же усложнили ввиду того, что текстовый файл на выходе весит под 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
                )
        )



Время: 22:57.

Время: 22:57.
© OSzone.net 2001-