Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск и удаление строки в такестовых файлах одного каталога (http://forum.oszone.net/showthread.php?t=267598)

DmAv2k9 06-09-2013 11:17 2213642

Поиск и удаление строки в такестовых файлах одного каталога
 
Доброго времени суток.
Прошу прощения за ламерскую просьбу в помощи решения следующей задачи.
Есть каталог в котором лежит n-ое количество текстовых файлов.
Стоит задача искать в этих файлах строки, содержащие определенную комбинацию символов и удалять эти строки, при этом имена файлов обязательно должны сохраняться.

Как сделать для одного файла нашел:
type file.txt | findstr /i /v "strtofind" > temp.txt
del file.txt
rename temp.txt file.txt

а вот как это все сделать с несколькими файлами - увы, слабо.

Заранее спасибо.

Anonymоus 06-09-2013 12:14 2213673

Цитата:

Цитата DmAv2k9
а вот как это все сделать с несколькими файлами - увы, слабо »

DmAv2k9, получить все текстовые файлы из директории и вложенных директорий можно с помощью команды Dir. В вашем случае, она должна выглядеть примерно так:
Код:

Dir "C:\Path\to\dir\*.txt" /A:-D /B /S
А обработать полученные строки можно в цикле For с ключом /F, использовав там приведённые вами команды. Для справки посмотрите Dir /? и For /?

DmAv2k9 06-09-2013 17:55 2213832

Извиняюсь за нубство, но, видно, это не в моих силах осилить данную задачу.
Как я понял мне надо сделать что-то наподобие:

Код:

@echo off
set papka=D:\torg\*.txt
For /F %%I In ('Dir "%papka%" /A:-D /B /S') Do
(findstr /i /v "strtofind" > temp.txt
del %%I.txt
rename temp.txt %%I.txt)

Но, как конкретно, это реализовать, увы я не знаю.
Пожалуйста, поправьте мой кривой код, чтобы заработало. Как вариант, можно файлы после удаления в них искомых строк переносить в другой каталог, может так будет проще. Главное чтобы сохранялись имена файлов.

Anonymоus 06-09-2013 18:24 2213853

Цитата:

Цитата DmAv2k9
Но, как конкретно, это реализовать, увы я не знаю. »

Примерно как-то так:
Код:

@Echo Off
SetLocal EnableDelayedExpansion

Set StringToDelete=strtofind

For /F "delims=" %%A In ('Dir ".\*.txt" /A:-D /B /S') Do (
        FindStr /P /I /V /C:"%StringToDelete%" "%%~A">"%Temp%\%%~nxA"
        Del "%%A" && Move "%Temp%\%%~nxA" "%%~dpA">nul
)
Pause&Exit

Если какой-то участок кода вам покажется непонятным - спрашивайте, постараюсь объяснить.

DmAv2k9 06-09-2013 19:02 2213873

Огромное спасибо. Все работает чётко.
Единственный вопрос-пожелание, если не затруднит, поменять код так, чтобы батник обрабатывал ту папку, где он лежит, что бы отойти от

Код:

Set WorkDir=D:\torg

Anonymоus 06-09-2013 20:09 2213897

DmAv2k9, исправил предыдущее сообщение, теперь рабочая папка - та, из которой запущен батник, как вы и просили.

paflik@vk 18-09-2013 01:05 2219637

Не поможете с запросом?) Вот этот бы скрипт немного перепилить, чтобы он брал искомые выражения из файла 123.txt


Время: 14:00.

Время: 14:00.
© OSzone.net 2001-