1 (изменено: xsanekk, 2013-10-09 00:42:59)

Тема: CMD/BAT: Поиск строки в подкаталогах.

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

Есть папка, в ней находятся подкаталоги, в подкаталогах находятся файлы одинакового расширения, но разные имена. Необходимо найти какое количество раз повторяется заданное слово во всех файлах данного подкаталога, затем считать имя этого подкаталога и записать в текстовый файл, потом аналогично сделать в следующем каталоге и дописать в файл... Файл получится вида:
=======================
ИмяКаталога1; КоличествоСлов
ИмяКаталога2; КоличествоСлов
ИмяКаталогаN; КоличествоСлов
=======================
Общее количество слов: NNNN

У меня получилось считать только общее количество слов во всех подкаталогах файлах...


findstr /S /M "ИскомоеСлово" F:\AVT\PRJ\*.* >>f:\AVT\TMP\1.txt
find /v /n /c "" F:\AVT\TMP\1.txt >F:\AVT\TXT\ITOG.txt

2

Re: CMD/BAT: Поиск строки в подкаталогах.

Необходимо найти какое количество раз повторяется заданное слово во всех файлах данного подкаталога,

Я не очень представляю себе, насколько сие возможно в рамках заданной категории, поскольку не вижу способа сосчитать количество вхождений «слова» в файл. «findstr.exe» ищет строки, содержащие слово, но не количество слов:

мама мама мама

3 (изменено: yuriy2000, 2013-10-09 06:27:24)

Re: CMD/BAT: Поиск строки в подкаталогах.

Если вы хотите получить чтобы в строке "мама мама мама" слово встречается 3 раза, то как уже написал выше  alexii   это сделать на CMD маловероятно. Если это условие для вас некритично, то можно сделать так:

Есть папка, в ней находятся подкаталоги,

1. используйте конструкцию FOR /D для каждого подкаталога

Найти какое количество раз повторяется заданное слово во всех файлах данного подкаталога

2. для поиска кол-ва строк содержащих слова используйте find /c "Required" *.txt |find ":"
получим что-то типа:


---------- 2.TXT: 8
---------- 1.TXT: 0
---------- 12.TXT: 8

3. полученные файл для каждого подкаталога  обрабатываем через FOR /F
----------
PS: проще конечно написать скрипт на VBS/JScript/Perl   и т.д.

4

Re: CMD/BAT: Поиск строки в подкаталогах.

Тогда я переношу это в раздел форума VBS?

5 (изменено: wisgest, 2013-10-09 20:55:30)

Re: CMD/BAT: Поиск строки в подкаталогах.

yuriy2000 пишет:

2. для поиска кол-ва строк содержащих слова используйте find /c "Required" *.txt |find ":"
получим что-то типа:


---------- 2.TXT: 8
---------- 1.TXT: 0
---------- 12.TXT: 8

3. полученные файл для каждого подкаталога  обрабатываем через FOR /F

Можно и покороче:

type *.txt 2>nul | find /c "Required"

сразу выведет число. Чтобы поместить его в счётчик:

for /f %%i in ('type *.txt 2^>nul ^| find /c "Required"') do set /a сount+=%%i

6

Re: CMD/BAT: Поиск строки в подкаталогах.

Поясните пожалуйста что значит ":" в строке find /c "Required" *.txt |find ":"

У меня получилось считать вот так файлы:


cd F:\AVT\PRJ\
for /d /r %%s in ("*") do (
pushd %CD%
cd %%s
for %%a in (*.prj) do (
find /c "(702)" *.prj |find ":"
)
popd
)

Теперь задача как перенаправить все данные в файл, затем их про суммировать по папкам, а потом вывести в красивый файл который я описал выше...

7

Re: CMD/BAT: Поиск строки в подкаталогах.

@echo off
call :proc>F:\AVT\TXT\ITOG.txt
exit /b

:proc
set total=0
echo =======================
for /d /r "F:\AVT\PRJ\" %%s in (*) do (
  pushd "%%~s"
  for /f %%x in ('type *.prj 2^>nul ^| find /c "(702)"') do (
    echo %%s: %%x
    set /a total+=%%x
  )
  popd
)
echo =======================
echo Общее количество слов: %total%

8

Re: CMD/BAT: Поиск строки в подкаталогах.

wisgest, спасибо огромное!!! Это вообще то что нужно!!! Супер!!!!!!!!!!!!!!!!