Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Умный Поиск слов в файлах!

Ответить
Настройки темы
CMD/BAT - [решено] Умный Поиск слов в файлах!

Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:51, 28-10-2014

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата 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

Отправлено: 06:05, 31-10-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


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")
может я что то не правильно делаю?
--------------------------------------------------------------------

Отправлено: 09:54, 31-10-2014 | #12


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата 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"
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:48, 01-11-2014 | #13


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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
пишет ошибку:
Синтаксическая ошибка в имени файла, имени папки или метке тома.

Отправлено: 07:00, 01-11-2014 | #14


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата muqanna:
Цитата Georgio: »
батник больших файлах слова поиска что то не находить пропускает. Я файл посмотрел длина строки где то более 15000 знаков! слова Variant=abrakadabra почти самом конце находится! Думаю может из за это не берет?
Цитата muqanna:
for /f "tokens=2 delims==;" %%i in ('findstr /irc:".*Variant=..*;.*" "example.txt"') do echo %%i>>"Variant.txt" »

Отправлено: 10:16, 01-11-2014 | #15


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата 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"
.
Гарантию не даю.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:44, 02-11-2014 | #16


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Georgio:
muqanna, да. У команды "FINDSTR" проблемы с длинными строками. »
И ещё эта длина зависит от версии утилиты (конкретнее — от ОС, в составе которой она поставляется).
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:24, 02-11-2014 | #17


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось muqanna, 04-11-2014 в 14:58.


Отправлено: 08:56, 04-11-2014 | #18


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата muqanna:
можно ли организовать поиск с конца строки? Ну считать строку искать слова с конца в перед! »
muqanna, теоретически можно всё, но, чтобы выяснить, возможно ли это практически, нужны
Цитата Georgio:
образцы этих файлов »
.


Цитата muqanna:
если смотреть когда код выполняется он показывает что primer*.* но не копирует! Хотя файлы одинаковые primer.txt и primer_0.txt; primer.txt копирует а primer_0.txt не копирует »
Цитата Georgio:
Чтобы что-то выяснить, мне нужны полностью Ваш код, структура обрабатываемых папок с именами файлов и образцы этих файлов. »

Отправлено: 06:56, 05-11-2014 | #19



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Умный Поиск слов в файлах!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - [решено] Поиск слов hacker16 Программирование и базы данных 0 22-07-2014 21:10
CMD/BAT - [решено] поиск слов Letrblak Скриптовые языки администрирования Windows 2 09-12-2012 17:30
Любой язык - [решено] умный поиск-сравнение и замена в списках Baranius Скриптовые языки администрирования Windows 26 14-06-2012 21:58
Поиск слова в двух файлах david141 Вебмастеру 0 24-04-2012 02:41
C/C++ - Поиск текста в файлах student_po Программирование и базы данных 6 04-09-2009 23:33




 
Переход