Умный Поиск слов в файлах!
Есть два папки одних логи в втором сами файлы! Лог видеться на ошибках работе!
Так задача: Батник должен зайти папку с лог файлами взять файл там найти слова error после слова идет номер ошибке
error(пробел)121546(пробел)0121 (номер не повторяется) считать этот номер зайти второй папку с файлами и там в файлах найти это номер и скопировать этот файл с логом в другую папку. Было бы хорошо если они были в папки по пара каждый лог, их много!
Благодарю оказавших помощь!
|
Код:
@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
|
щя проверю, но все равно спасибо за внимания!
|
Georgio извиняюсь я вас чуть-чуть обманул признак выглядит так:
error(пробел)12.15.4.6(пробел)0121 Когда я удалил там точки класс все работает! Хотел сам решит эту проблему но не как не получается! Но вам Спасибо!
|
Цитата:
Цитата 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 (
.
|
понял щя проверим! ... :yahoo:
|
спасибо все работает!
Georgio Вопрос с того же сценарии если Variant=asda234e4sdaasd; типа такого мне надо взять код после = до ; а код может всегда меняться может 1 однозначной или 30 или 50 значения не ограниченно по количеству. Или такой вариант ищу слова Variant когда нахожу его
надо считать слова My Variant тут место my variant может быт любой слова! А Variant не меняется!
<input type="Variant" name="ie" value="windows-1251" >My Variant</>
Потом все это залит в тхт файл!
Спасибо за внимания!
|
Georgio Вопрос по первому примеру. Как можно сделать так что когда копирует файл из Logs, primer.log заберал primer_00.log копировал его тоже, ну типа как primer*.*! Сам тоже ковыряюсь боюсь испортит код сделано очень умно! Я в шоки что bat ники творят чудеса!
|
Цитата:
Цитата muqanna
если Variant=asda234e4sdaasd; типа такого мне надо взять код после = до ; а код может всегда меняться может 1 однозначной или 30 или 50 значения не ограниченно по количеству. »
|
Код:
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt"
|
Цитата:
Цитата 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"
|
Цитата:
Цитата 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
|
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")
может я что то не правильно делаю?
--------------------------------------------------------------------
|
Цитата:
Цитата 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"
.
|
Цитата:
Цитата 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
|
пишет ошибку:
Синтаксическая ошибка в имени файла, имени папки или метке тома.
|
батник больших файлах слова поиска что то не находить пропускает. Я файл посмотрел длина строки где то более 15000 знаков! слова Variant=abrakadabra почти самом конце находится! Думаю может из за это не берет?
Цитата:
Цитата muqanna
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt" »
|
|
Цитата:
Цитата 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"
.
Гарантию не даю.
|
Цитата:
Цитата Georgio
muqanna, да. У команды "FINDSTR" проблемы с длинными строками. »
|
И ещё эта длина зависит от версии утилиты (конкретнее — от ОС, в составе которой она поставляется).
|
Цитата Georgio:
можно ли организовать поиск с конца строки? Ну считать строку искать слова с конца в перед! (пробовал FIND все равно длинных строк пропускает) »
Цитата Georgio:
copy "%%o:%%~pnp*%%~xp" "%copies_dir%\%%l %%m">nul
если смотреть когда код выполняется он показывает что primer*.* но не копирует! Хотя файлы одинаковые primer.txt и primer_0.txt; primer.txt копирует а primer_0.txt не копирует по структуре файлы одинаковы! »
|
Цитата:
Цитата muqanna
можно ли организовать поиск с конца строки? Ну считать строку искать слова с конца в перед! »
|
muqanna, теоретически можно всё, но, чтобы выяснить, возможно ли это практически, нужны .
Цитата:
Цитата muqanna
если смотреть когда код выполняется он показывает что primer*.* но не копирует! Хотя файлы одинаковые primer.txt и primer_0.txt; primer.txt копирует а primer_0.txt не копирует »
|
Цитата:
Цитата Georgio
Чтобы что-то выяснить, мне нужны полностью Ваш код, структура обрабатываемых папок с именами файлов и образцы этих файлов. »
|
|
Время: 05:43.
© OSzone.net 2001-