Показать полную графическую версию : [решено] Умный Поиск слов в файлах!
Есть два папки одних логи в втором сами файлы! Лог видеться на ошибках работе!
Так задача: Батник должен зайти папку с лог файлами взять файл там найти слова 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, не надо удалять точки. Просто тогда так:
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 ники творят чудеса!
если Variant=asda234e4sdaasd; типа такого мне надо взять код после = до ; а код может всегда меняться может 1 однозначной или 30 или 50 значения не ограниченно по количеству. »
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt"
ищу слова 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"
Как можно сделать так что когда копирует файл из 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")
может я что то не правильно делаю?
--------------------------------------------------------------------
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".
@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: »
батник больших файлах слова поиска что то не находить пропускает. Я файл посмотрел длина строки где то более 15000 знаков! слова Variant=abrakadabra почти самом конце находится! Думаю может из за это не берет?for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt" »
@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, на моей модели пакетный файл с данным кодом отрабатывает корректно. Чтобы что-то выяснить, мне нужен полностью Ваш код, структура обрабатываемых папок с именами файлов и образцы этих файлов.
батник больших файлах слова поиска что то не находить пропускает. Я файл посмотрел длина строки где то более 15000 знаков! слова Variant=abrakadabra почти самом конце находится! Думаю может из за это не берет?
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".
Гарантию не даю.
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, теоретически можно всё, но, чтобы выяснить, возможно ли это практически, нужны образцы этих файлов ».
если смотреть когда код выполняется он показывает что primer*.* но не копирует! Хотя файлы одинаковые primer.txt и primer_0.txt; primer.txt копирует а primer_0.txt не копирует »
Чтобы что-то выяснить, мне нужны полностью Ваш код, структура обрабатываемых папок с именами файлов и образцы этих файлов. »
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.