Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - BAT поиск текста в файле с условием

Пользователь


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

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


Помогите с батничком
Необходимо чтобы батник проверял в папке все файлы которые там есть.
Файлы по сути текстовые, но лежат в формате *.msg
так вот нужно чтобы батник проверял присутствует в файле текст например "for <adm@" , если да , то этот файл нужно скопировать в папку adm если "for <info@" то этот файл нужно скопировать в папку info.
Но важно поиск с начала файла и по первой найденной строке потому как в файле могут быть обе строки "for <adm@" и "for <info@" важна именно первая найденная строка

Заранее премного благодарен!

Отправлено: 21:48, 30-04-2014

 

Ветеран


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

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


Как-то так:

Код: Выделить весь код
@echo off
for %%i in (*.msg) do (
 for /f "delims=" %%j in ('
  findstr /iln /c:"for <adm@" /c:"for <info@" "%%~i"^| findstr /b 1:
 ') do (
  echo "%%j"| >nul (findstr /ilc:"for <adm@"&& copy "%%~i" "adm"|| copy "%%~i" "info")
 )
)
exit /b
.

Отправлено: 23:49, 30-04-2014 | #2



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

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


Пользователь


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

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


Да скрипт работает, но как быть если нужно добавить больше аргументов, например искать "for <adm@" "for <info@" "for <ivanov@" "for <petrov@" "for <sidorov@" что первое находит в ту папку и кладем adm info ivanov petrov и т.д.

Отправлено: 16:50, 04-05-2014 | #3


Ветеран


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

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


Да не вопрос!


Цитата rosalin:
что первое находит в ту папку и кладем »
Если такой папки не существует, то она будет создана.


Полная сортировка по заданному алгоритму:

Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for %%i in (*.msg) do (
 for /f "delims=" %%j in ('
  findstr /inrc:"for <.*@" "%%~i"^| findstr /b 1:
 ') do (
  set "string=%%j"
  set "string=!string:*for <=!"
  for /f "delims=@" %%k in ("!string!") do (
   md "%%k" 2>nul
   copy "%%~i" "%%k">nul
  )
 )
)
endlocal
exit /b
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:11, 05-05-2014 | #4


Ветеран


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

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


Цитата rosalin:
как быть если нужно добавить больше аргументов, например искать "for <adm@" "for <info@" "for <ivanov@" "for <petrov@" "for <sidorov@" »


Еспи нужна выборочная сортировка с любым числом аргументов, то тогда так:

Код: Выделить весь код
@echo off
call:# "adm" "info" "ivanov" "petrov" "sidorov"
exit /b

:#
for %%i in (*.msg) do (
 for /f "delims=" %%j in ('
  findstr /inrc:"for <.*@" "%%~i"^| findstr /b 1:
 ') do (
  for %%k in (%*) do call:## "%%j" %%k "%%~i"
 )
)
exit /b

:##
echo %1| >nul (
findstr /ilc:"for <%~2@"&& (
md %2 2>&1
copy %3 %2
))
exit /b
.

Если нужные папки не существуют, то они будут созданы.

Отправлено: 00:33, 05-05-2014 | #5


Пользователь


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

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


Ребята протестил на реальном файле не сработало

вот структурка

Код: Выделить весь код
Return-path: <adm@domain.ru>
Received: from SERVER1C bydomain.ru ()
	with ESMTP id 60-md50000009510.msg
	for <adm@
структура как есть с пробелами

Отправлено: 00:46, 05-05-2014 | #6


Пользователь


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

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


не срабатывает если перед искомой строкой есть любой текст или просто несколько пустых строк

Отправлено: 01:14, 05-05-2014 | #7


Ветеран


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

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


rosalin, нашёл и устранил проблему. Привожу отредактированный код для обоих пакетных файлов.

Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for %%i in (*.msg) do (
 for /f "delims=" %%j in ('
  findstr /irc:"for <.*@" "%%~i"^| findstr /n "^"^| findstr /b 1:
 ') do (
  set "string=%%j"
  set "string=!string:*for <=!"
  for /f "delims=@" %%k in ("!string!") do (
   md "%%k" 2>nul
   copy "%%~i" "%%k">nul
  )
 )
)
endlocal
exit /b
Код: Выделить весь код
@echo off
call:# "adm" "info" "ivanov" "petrov" "sidorov"
exit /b

:#
for %%i in (*.msg) do (
 for /f "delims=" %%j in ('
  findstr /irc:"for <.*@" "%%~i"^| findstr /n "^"^| findstr /b 1:
 ') do (
  for %%k in (%*) do call:## "%%j" %%k "%%~i"
 )
)
exit /b

:##
echo %1| >nul (
findstr /ilc:"for <%~2@"&& (
md %2 2>&1
copy %3 %2
))
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:16, 05-05-2014 | #8


Пользователь


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

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


Georgio , круто! А как второй скрипт надо запускать с параметром ?

Отправлено: 09:02, 05-05-2014 | #9


Ветеран


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

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


Цитата rosalin:
А как второй скрипт надо запускать с параметром ? »

С помощью командной строки или запускающего пакетного файла:
Код: Выделить весь код
"somename.bat" "adm" "info" "ivanov" "petrov" "sidorov"
, предварительно убрав из кода вторую и третью строки:
Код: Выделить весь код
call:# "adm" "info" "ivanov" "petrov" "sidorov"
exit /b
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:34, 05-05-2014 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - как сделать .bat который выполнит поиск нужного текста с заменой не нужного на нужный ***b.m.m.c.b*** Скриптовые языки администрирования Windows 3 01-03-2018 09:53
CMD/BAT - Поиск и удаление текста в файле ajakzs Скриптовые языки администрирования Windows 6 18-10-2012 09:18
CMD/BAT - Поиск и замена текста через bat Lilless Скриптовые языки администрирования Windows 0 28-02-2012 02:08
CMD/BAT - [решено] Поиск текста в *.inf файле и вывод на экран 4zz Скриптовые языки администрирования Windows 1 25-07-2011 16:23
[решено] Поиск и замена текста в файле TERMINAL AutoIt 6 16-03-2011 17:49




 
Переход