Показать полную графическую версию : [решено] Поиск, замена текста в *.txt и вывод результата в другой каталог
Здравствуйте. Помогите создать батник который производит поиск в папке файлов *.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*****ыспыва
поиск в папке файлов *.txt. В них ищем, допустим, "не готов" »
Упакуйте образцы двух-трёх файлов в архив, каковой приложите к сообщению.
Код:
@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" (например, если в Вашем тексте надо заменить фразу "Не готов", то надо писать именно "Не готов", а не "не готов".
1) пакетный файл с данным кодом ни в коем случае не сохраняйте в кодировке OEM-866; »
Никак Вы не хотите народ приобщать к разумному-доброму-вечному :).
Никак Вы не хотите народ приобщать к разумному-доброму-вечному :). »
Не виноватая я! Он сам пришёл! Да я уж не такой злодей, это опять она, команда "FINDSTR":diablo:, виновата:).
Огромное спасибо. Все работает.
Насчет кодировки все понял, меняем (Не готов - Not ready и отправлен - has been sent)
Еще просьба - можно сделать поиск и во вложеных папках, и как то сделать чтобы переодически все повторялось(раз в час или полчаса)?
и как то сделать чтобы переодически все повторялось(раз в час или полчаса)? »
Назначенные задания/Планировщик задач. Главное, чтоб обработанные файлы у Вас куда-то убирались из исходной папки.
... сделать поиск и во вложеных папках... »
Можно. Добавьте ключ "/S" для команды "FINDSTR": ^>.tmp cmd/v/c echo.!original!^& 2^>nul findstr/msilg:.tmp "%source%\%pattern%"^& del .tmp.
... сделать чтобы переодически все повторялось(раз в час или полчаса)... »
Зациклить тоже можно. Но лучше делайте, как коллега Iska советует.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.