PDA

Показать полную графическую версию : [решено] Поиск, замена текста в *.txt и вывод результата в другой каталог


Vi3aliy
01-11-2015, 21:54
Здравствуйте. Помогите создать батник который производит поиск в папке файлов *.txt. В них ищем, допустим, "не готов" и меняем на "отправлен", и сохраняем результат в другую папку с тем же именем, если есть такой файл с таким именем - заменяем его без подтверждения... понятия не имею как сделать это. В тексте могут встречаться символы [] # *** . Помогите плз.

Пример
до

Не готов hghgjhjgjg# 35464747лалалл
апаррпопопо [9f8d7d6d5s4s]
hghghgj*****kgkgk

Не готов hghgjhjgjg# 3876556564лалалл
апаррпопопо [6н7у8вл8]
hghghgj*****ыспыва

после

отправлен hghgjhjgjg# 35464747лалалл
апаррпопопо [9f8d7d6d5s4s]
hghghgj*****kgkgk

отправлен hghgjhjgjg# 3876556564лалалл
апаррпопопо [6н7у8вл8]
hghghgj*****ыспыва

Iska
02-11-2015, 00:26
поиск в папке файлов *.txt. В них ищем, допустим, "не готов" »
Упакуйте образцы двух-трёх файлов в архив, каковой приложите к сообщению.

Georgio
02-11-2015, 01:08
Код:


@echo off

>nul chcp 1251

set "source=C:\папка А"
set "destination=C:\папка Б"
set "pattern=*.txt"

>nul chcp 866

set "original=Не готов"
set "final=отправлен"

for /f "delims=" %%i in ('
^>.tmp cmd/v/c echo.!original!^& 2^>nul findstr/milg:.tmp "%source%\%pattern%"^& del .tmp
') do 2>nul (
for /f %%j in ('^<"%%i" find/c /v ""') do <"%%i">"%destination%\%%~nxi" (
for /l %%k in (1 1 %%j) do @(
set x=& set/p x=& if defined x (
for /f "delims=" %%l in ('cmd/v/c echo "!x:%original%=%final%!"') do @(
echo.%%~l
)
) else (
echo.
)
)
)
)

exit/b


.



Предупреждение:


1) пакетный файл с данным кодом ни в коем случае не сохраняйте в кодировке OEM-866;

2) в случае замены строки, содержащей буквы русского алфавита, чётко соблюдайте регистр этих букв при задании переменной "original" (например, если в Вашем тексте надо заменить фразу "Не готов", то надо писать именно "Не готов", а не "не готов".

Iska
02-11-2015, 05:48
1) пакетный файл с данным кодом ни в коем случае не сохраняйте в кодировке OEM-866; »
Никак Вы не хотите народ приобщать к разумному-доброму-вечному :).

Georgio
02-11-2015, 08:02
Никак Вы не хотите народ приобщать к разумному-доброму-вечному :). »

Не виноватая я! Он сам пришёл! Да я уж не такой злодей, это опять она, команда "FINDSTR":diablo:, виновата:).

Vi3aliy
02-11-2015, 21:30
Огромное спасибо. Все работает.
Насчет кодировки все понял, меняем (Не готов - Not ready и отправлен - has been sent)
Еще просьба - можно сделать поиск и во вложеных папках, и как то сделать чтобы переодически все повторялось(раз в час или полчаса)?

Iska
02-11-2015, 21:36
и как то сделать чтобы переодически все повторялось(раз в час или полчаса)? »
Назначенные задания/Планировщик задач. Главное, чтоб обработанные файлы у Вас куда-то убирались из исходной папки.

Georgio
02-11-2015, 22:10
... сделать поиск и во вложеных папках... »



Можно. Добавьте ключ "/S" для команды "FINDSTR": ^>.tmp cmd/v/c echo.!original!^& 2^>nul findstr/msilg:.tmp "%source%\%pattern%"^& del .tmp.




... сделать чтобы переодически все повторялось(раз в час или полчаса)... »



Зациклить тоже можно. Но лучше делайте, как коллега Iska советует.

Vi3aliy
03-11-2015, 21:46
Всё получилось.Спасибо.




© OSzone.net 2001-2012