Компьютерный форум 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=312044)

surgutfred 26-02-2016 07:12 2610404

Выбрать из ТХТ строки с датами заданного периода
 
Добрый день.
Есть куча тхт файлов я с помощью bat файла выбираю только строки со словом Отключение

rem Оставляем только строки со словом отключение
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir "#*.txt" /a-d /b') do (
findstr /c:"Отключение" "%%i">log.tmp
del "%%i"
move log.tmp "%%i"
)

Получились такие строки
20.01.2016 208980 Отключение
25.01.2016 148557 Отключение
20.02.2016 280087 Отключение
25.02.2016 289205 Отключение

Мне теперь что нужно - задать временной период типа
set nachalo=26.01.16
set konec=25.02.16

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

Iska 26-02-2016 07:48 2610411

surgutfred, попробуйте воспользоваться для этого LogParser'ом (Средство Log Parser 2.2). Возможно также, что и предварительно отбирать строки не придётся.

surgutfred 04-03-2016 07:43 2612686

Хотелось бы без лишнего софта, на бат файле. Будем думать.

Iska 04-03-2016 08:30 2612692

surgutfred, дело в том, что в пакетных файлах нет такого понятия как переменная и её тип. Следовательно, язык пакетных файлов ничего не знает о таком типе данных, как дата, и не имеет никаких средств для работы с ними. Можно, конечно, поизвращаться от полной безвыходности, но зачем?

Я показал, каким образом это можно сделать быстро и просто — одним SQL-запросом. Хотите исключительно встроенными средствами — можно использовать WSH или PoSH. Главный вопрос в объёмах обработки. Если это сотни килобайт — одно дело, сотни мегабайт — совсем-совсем другое, и в последнем случае равных LogParser'у нет.

P.S. Чем он Вам не нравится? Родное средство от Microsoft.

greg zakharov 04-03-2016 09:49 2612717

Не, LogParser - это от Лукавого, лучше уж действительно одним SQL-запросом все решить. Но если кто-то не ищет легких путей и предположить, что полученные файлы выглядят примерно так:
#file1.txt
Код:

20.01.2016 208980 Отключение
25.01.2016 148557 Отключение
20.02.2016 280087 Отключение
25.02.2016 289205 Отключение
...

#fileN.txt
Код:

20.01.2016 208980 Отключение
25.01.2016 148557 Отключение
20.02.2016 280087 Отключение
25.02.2016 289205 Отключение
...

То на бате вытащить нужные строки можно примерно так:
Код:

@echo off
  setlocal
    chcp 1251>nul
    for /f "tokens=1,* delims=:" %%i in (
      'findstr /rc:"^25\.0[1|2]\.2016" #*.txt'
    ) do echo:%%j>>%%~ni.modified%%~xi
  endlocal&chcp 866>nul
exit /b


Iska 04-03-2016 10:12 2612721

Цитата:

Цитата greg zakharov
Не, LogParser - это от Лукавого, лучше уж действительно одним SQL-запросом все решить. »

LogParser — это и есть «один SQL-запрос».


Цитата:

Цитата greg zakharov
То на бате вытащить нужные строки можно примерно так:
Код:


'findstr /rc:"^25\.0[1|2]\.2016" #*.txt'

»

На мой взгляд, это совсем не то, что:
Цитата:

Цитата surgutfred
Мне теперь что нужно - задать временной период типа
set nachalo=26.01.16
set konec=25.02.16
и оставить в каждом файле только те строки, которые соответствуют этому периоду »


greg zakharov 04-03-2016 10:48 2612735

Цитата:

Цитата Iska
LogParser — это и есть «один SQL-запрос».

Речь про исходный код самого LogParser'а, к обычным файлам можно также как к БД обращаться - чай вестимо.

Цитата:

Цитата Iska
На мой взгляд, это совсем не то...

Оведно:
Цитата:

Цитата surgutfred
оставить в каждом файле только те строки, которые соответствуют этому периоду

Но если захватывать записи между этими двумя значениями, то лучше действительно использовать PowerShell.

Iska 04-03-2016 11:01 2612738

Цитата:

Цитата greg zakharov
Оведно »

Переведите.

greg zakharov 04-03-2016 11:07 2612740

Iska, ужель запамятовали?

Elven 04-03-2016 11:09 2612744

Iska, оведно

Iska 04-03-2016 11:32 2612754

greg zakharov, Elven, конечно, запамятовал, ибо не знал и не сталкиваюсь ни в письме, ни в речи. Спасибо, ясно.


Время: 08:33.

Время: 08:33.
© OSzone.net 2001-