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

muqanna 28-10-2014 09:51 2421387

Умный Поиск слов в файлах!
 
Есть два папки одних логи в втором сами файлы! Лог видеться на ошибках работе!
Так задача: Батник должен зайти папку с лог файлами взять файл там найти слова error после слова идет номер ошибке
error(пробел)121546(пробел)0121 (номер не повторяется) считать этот номер зайти второй папку с файлами и там в файлах найти это номер и скопировать этот файл с логом в другую папку. Было бы хорошо если они были в папки по пара каждый лог, их много!
Благодарю оказавших помощь!

Georgio 29-10-2014 13:25 2422122

Код:

@echo off

set "logs_dir=D:\Logs"
set "files_dir=D:\Files"
set "copies_dir=D:\Copies"

for /f "delims=" %%i in ('findstr /irc:"error [0-9][0-9]* [0-9][0-9]*" "%logs_dir%\*"') do (
 set var=%%i
 for /f "tokens=1,2 delims=$" %%j in ('call set /p"=%%var:error =$%%"^<nul') do (
  for /f "tokens=1,2" %%l in ("%%k") do (
  for /f "delims=" %%n in ('findstr /mc:"%%l %%m" "%files_dir%\*"') do (
    echo f| xcopy "%%n" "%copies_dir%\%%l %%m\%%~nxn">nul
    for /f "tokens=1,2 delims=:" %%o in ("%%j") do (
    copy "%%o:%%p" "%copies_dir%\%%l %%m">nul
    )
    )
  )
  )
 )

exit /b


muqanna 29-10-2014 14:21 2422163

щя проверю, но все равно спасибо за внимания!

muqanna 29-10-2014 16:15 2422211

Georgio извиняюсь я вас чуть-чуть обманул признак выглядит так:
error(пробел)12.15.4.6(пробел)0121 Когда я удалил там точки класс все работает! Хотел сам решит эту проблему но не как не получается! Но вам Спасибо!

Georgio 29-10-2014 16:37 2422219

Цитата:

Цитата muqanna
Когда я удалил там точки класс все работает! »


muqanna, не надо удалять точки. Просто тогда так:

Код:

for /f "delims=" %%i in ('findstr /irc:"error [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* [0-9][0-9]*" "%logs_dir%\*"') do (
.

muqanna 30-10-2014 06:39 2422371

понял щя проверим! ... :yahoo:

muqanna 30-10-2014 12:10 2422501

спасибо все работает!
Georgio Вопрос с того же сценарии если Variant=asda234e4sdaasd; типа такого мне надо взять код после = до ; а код может всегда меняться может 1 однозначной или 30 или 50 значения не ограниченно по количеству. Или такой вариант ищу слова Variant когда нахожу его
надо считать слова My Variant тут место my variant может быт любой слова! А Variant не меняется!
<input type="Variant" name="ie" value="windows-1251" >My Variant</>
Потом все это залит в тхт файл!
Спасибо за внимания!

muqanna 30-10-2014 16:29 2422626

Georgio Вопрос по первому примеру. Как можно сделать так что когда копирует файл из Logs, primer.log заберал primer_00.log копировал его тоже, ну типа как primer*.*! Сам тоже ковыряюсь боюсь испортит код сделано очень умно! Я в шоки что bat ники творят чудеса!

Georgio 31-10-2014 04:38 2422780

Цитата:

Цитата muqanna
если Variant=asda234e4sdaasd; типа такого мне надо взять код после = до ; а код может всегда меняться может 1 однозначной или 30 или 50 значения не ограниченно по количеству. »

Код:

for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt"

Georgio 31-10-2014 05:47 2422790

Цитата:

Цитата muqanna
ищу слова Variant когда нахожу его
надо считать слова My Variant тут место my variant может быт любой слова! А Variant не меняется!
<input type="Variant" name="ie" value="windows-1251" >My Variant</> »

Код:

for /f "tokens=2 delims=<>" %%i in ('findstr /irc:"^\<input type=\"Variant\" name=\"ie\" value=\"windows\-1251\" \>..*\<\/\>$" "example.txt"') do echo %%i>>"Variant.txt"

Georgio 31-10-2014 06:05 2422791

Цитата:

Цитата muqanna
Как можно сделать так что когда копирует файл из Logs, primer.log заберал primer_00.log копировал его тоже, ну типа как primer*.*! »


Код:

@echo off

:: Значением переменных могут быть только полные имена папок!
set "logs_dir=D:\Logs"
set "files_dir=D:\Files"
set "copies_dir=D:\Copies"

for /f "delims=" %%i in ('findstr /irc:"error [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* [0-9][0-9]*" "%logs_dir%\*"') do (
 set var=%%i
 for /f "tokens=1,2 delims=$" %%j in ('call set /p"=%%var:error =$%%"^<nul') do (
  for /f "tokens=1,2" %%l in ("%%k") do (
  for /f "delims=" %%n in ('findstr /mc:"%%l %%m" "%files_dir%\*"') do (
    echo f| xcopy "%%n" "%copies_dir%\%%l %%m\%%~nxn">nul
    for /f "tokens=1,2 delims=:" %%o in ("%%j") do (
      copy "%%o:%%~pnp*%%~xp" "%copies_dir%\%%l %%m">nul
    )
    )
  )
  )
 )

exit /b


muqanna 31-10-2014 09:54 2422850

Georgio
(copy "%%o:%%~pnp*%%~xp" "%copies_dir%\%%l %%m">nul)
пишет ошибку:
Синтаксическая ошибка в имени файла, имени папки или метке тома.
-------------------------------------------------------------------
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt"

я хотел его сделать что он работал с файлами из папки но он все равно с одной работает!

set "files_dir=D:\Files"
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "%files_dir%\*"') do (
set var=%%i
echo %%i>>"Variant.txt")
может я что то не правильно делаю?
--------------------------------------------------------------------

Georgio 01-11-2014 03:48 2423175

Цитата:

Цитата muqanna
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt"
я хотел его сделать что он работал с файлами из папки но он все равно с одной работает!
set "files_dir=D:\Files"
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "%files_dir%\*"') do (
set var=%%i
echo %%i>>"Variant.txt")
может я что то не правильно делаю? »

muqanna,
Код:

findstr /irc:".*Variant=..*;.*" "example.txt"
и
Код:

findstr /irc:".*Variant=..*;.*" "%files_dir%\*
-- всё-таки разные команды, поэтому и вывод результата у них разный. Конечно, Вы неправильно делаете. Чтобы эту конструкцию, предназначенную для поиска в одном файле, приспособить для поиска в разных файлах, нужно номер "токена" (или номера "токенов") увеличить на 2 и добавить в разделители двоеточие. Вот так будет работать:
Код:

for /f "tokens=4 delims==;:" %%i in ('findstr /irc:".*Variant=..*;.*" "D:\Files\*"') do echo %%i>>"Variant.txt"
.

muqanna 01-11-2014 07:00 2423186

Цитата:

Цитата Georgio

@echo off

:: Значением переменных могут быть только полные имена папок!
set "logs_dir=D:\Logs"
set "files_dir=D:\Files"
set "copies_dir=D:\Copies"

for /f "delims=" %%i in ('findstr /irc:"error [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* [0-9][0-9]*" "%logs_dir%\*"') do (
set var=%%i
for /f "tokens=1,2 delims=$" %%j in ('call set /p"=%%var:error =$%%"^<nul') do (
for /f "tokens=1,2" %%l in ("%%k") do (
for /f "delims=" %%n in ('findstr /mc:"%%l %%m" "%files_dir%\*"') do (
echo f| xcopy "%%n" "%copies_dir%\%%l %%m\%%~nxn">nul
for /f "tokens=1,2 delims=:" %%o in ("%%j") do (
copy "%%o:%%~pnp*%%~xp" "%copies_dir%\%%l %%m">nul
)
)
)
)
)

exit /b

пишет ошибку:
Синтаксическая ошибка в имени файла, имени папки или метке тома.

muqanna 01-11-2014 10:16 2423207

Цитата:

Цитата muqanna
Цитата Georgio: »

батник больших файлах слова поиска что то не находить пропускает. Я файл посмотрел длина строки где то более 15000 знаков! слова Variant=abrakadabra почти самом конце находится! Думаю может из за это не берет?
Цитата:

Цитата muqanna
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt" »


Georgio 02-11-2014 09:44 2423493

Цитата:

Цитата muqanna
Цитата:

Цитата Georgio
@echo off
:: Значением переменных могут быть только полные имена папок!
set "logs_dir=D:\Logs"
set "files_dir=D:\Files"
set "copies_dir=D:\Copies"
for /f "delims=" %%i in ('findstr /irc:"error [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* [0-9][0-9]*" "%logs_dir%\*"') do (
set var=%%i
for /f "tokens=1,2 delims=$" %%j in ('call set /p"=%%var:error =$%%"^<nul') do (
for /f "tokens=1,2" %%l in ("%%k") do (
for /f "delims=" %%n in ('findstr /mc:"%%l %%m" "%files_dir%\*"') do (
echo f| xcopy "%%n" "%copies_dir%\%%l %%m\%%~nxn">nul
for /f "tokens=1,2 delims=:" %%o in ("%%j") do (
copy "%%o:%%~pnp*%%~xp" "%copies_dir%\%%l %%m">nul
)
)
)
)
)
exit /b

пишет ошибку:
Синтаксическая ошибка в имени файла, имени папки или метке тома. »


muqanna, на моей модели пакетный файл с данным кодом отрабатывает корректно. Чтобы что-то выяснить, мне нужен полностью Ваш код, структура обрабатываемых папок с именами файлов и образцы этих файлов.



Цитата:

Цитата muqanna
батник больших файлах слова поиска что то не находить пропускает. Я файл посмотрел длина строки где то более 15000 знаков! слова Variant=abrakadabra почти самом конце находится! Думаю может из за это не берет?
Цитата:

Цитата muqanna
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt"

»


muqanna, да. У команды "FINDSTR" проблемы с длинными строками. Попробуйте с помощью команды "FIND":
Код:

for /f "tokens=2 delims==;" %%i in ('^<"example.txt" find /i "Variant="^| find ";"') do echo %%i>>"Variant.txt"
.
Гарантию не даю.

Iska 02-11-2014 10:24 2423501

Цитата:

Цитата Georgio
muqanna, да. У команды "FINDSTR" проблемы с длинными строками. »

И ещё эта длина зависит от версии утилиты (конкретнее — от ОС, в составе которой она поставляется).

muqanna 04-11-2014 08:56 2424399

Цитата Georgio:
можно ли организовать поиск с конца строки? Ну считать строку искать слова с конца в перед! (пробовал FIND все равно длинных строк пропускает) »
Цитата Georgio:
copy "%%o:%%~pnp*%%~xp" "%copies_dir%\%%l %%m">nul
если смотреть когда код выполняется он показывает что primer*.* но не копирует! Хотя файлы одинаковые primer.txt и primer_0.txt; primer.txt копирует а primer_0.txt не копирует по структуре файлы одинаковы! »

Georgio 05-11-2014 06:56 2424801

Цитата:

Цитата muqanna
можно ли организовать поиск с конца строки? Ну считать строку искать слова с конца в перед! »

muqanna, теоретически можно всё, но, чтобы выяснить, возможно ли это практически, нужны
Цитата:

Цитата Georgio
образцы этих файлов »

.


Цитата:

Цитата muqanna
если смотреть когда код выполняется он показывает что primer*.* но не копирует! Хотя файлы одинаковые primer.txt и primer_0.txt; primer.txt копирует а primer_0.txt не копирует »

Цитата:

Цитата Georgio
Чтобы что-то выяснить, мне нужны полностью Ваш код, структура обрабатываемых папок с именами файлов и образцы этих файлов. »



Время: 05:43.

Время: 05:43.
© OSzone.net 2001-