Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/50: Рейтинг темы: голосов - 50, средняя оценка - 4.98
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
1

Поиск определённого слова во всех имеющихся в заданной директории текстовых файлах

09.03.2011, 13:03. Показов 9203. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите плиз, как сделать поиск во всех имеющихся текстовых файлах определённого слова? На диске допустим С:\\
Тоесть без использования findstr. С помощью for

Добавлено через 8 минут
и желательно с комментированием строк
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.03.2011, 13:03
Ответы с готовыми решениями:

Вывод в файл информации о всех имеющихся в заданной директории исполняемых файлах
Всем привет. Имеется задание: Разработать пакетный файл для вывода информации в файл о всех...

Замена части определённой строки во всех текстовых файлах заданной директории
Доброго день. Необходима помощь в написании bat, который бы заменил во всех файлаx (.txt) в...

Поиск заданной строки во всех текстовых файлах заданного каталога
Поиск заданной строки во всех текстовых файлах заданного каталога. Алгоритм "лечения": перемещение...

Поиск слова в текстовых файлах на диске
Может у кого есть код, который ищет на диске текстовые файлы с определенным словом и копирует файлы...

13
мусор в БД
4674 / 1128 / 35
Регистрация: 17.01.2009
Сообщений: 4,481
09.03.2011, 13:12 2
http://www.windowsfaq.ru/content/view/171/57/
В конце то что Вам нужно.
1
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
20.11.2011, 13:58  [ТС] 3
давно не занимался программированием, решил вспомнить!
за ссылку благодарю, но надо с использованием цикла for и if, а по ссылке используется find.
С find конечно разобрался, но хотелось бы вникнуть в синтаксис командной строки, а find какбы всё сама делает
Т.е. нужно найти строку допустим "new" в файле 1.txt
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo OFF
 
set cc=0
 
for /f "tokens=*" %%i in (1.txt) do (     rem здесь по идее в перем i берётся вся строка
@for /f "tokens=*" %%j in ("%%i") do (    rem а здесь перебираются по идее подстроки
@if "%%j"=="new" set /a cc=cc+1 & @echo %%i ) )
 
echo cc = %cc%
 
@echo ON
почемуто не находит!
подскажите плиз
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.11.2011, 20:13 4
Поточнее объясни задачу, что ищешь слово? Тогда for /?. Подстроки указываются в tokens, *-это все подстроки. Можно в принципе всё сделать с даже без for только с if если вы любите примитив и не любите скорость.
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
20.11.2011, 22:30  [ТС] 5
есть допустим файл 1.txt с текстовыми записями, и мне надо найти какоето слово среди тех записей, допустим слово new
Если это слово стоит самое первое в предложении, то получается его найти, а если в центре, то не получается с тем кодом!
Както делал, но уже непомню, там вроде просто надо чтото в "tokens=..." правильно поставить!
Цитата Сообщение от Ris
Можно в принципе всё сделать с даже без for только с if если вы любите примитив и не любите скорость.
тут пока что речь не идёт про что больше нравится! Тут идёт речь про то, чтобы вообще разобраться в синтаксисе и в командах цикла for, и условной инструкцией if.
тоесть ради практики, чтобы разобраться!
И если можно, то как тогда просто с одним if найти слово?
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
21.11.2011, 16:09 6
Ну как слова определяются? "символы другие_символы" два слова разделенные пробелом. складываешь символы в переменную, пока не встречается пробел, потом сравниваешь со словом для поиска. Код писать пока нет желания.
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
22.11.2011, 00:00  [ТС] 7
как тогда выводить каждое слово поотдельности?
Тоесть допустим возьмём этот текст:
как
тогда
выводить
каждое...
жду с нетерпением!
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
22.11.2011, 09:51 8
Со строками да я не подумал, но с more решимо.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off
set /p slovo_poiksa="BBeduTE CJLoBo DJL9 /7oucka: "
set /p file_poiksa="BBeduTE qpau'JL DJL9 /7oucka: "
set /a counter_strok=0
:strok
type %file_poiksa% | more +%counter_strok% > "tmp.txt"
set /a counter_strok+=1
set /p str="" < "tmp.txt" && (call :slovo "%str%"&goto strok)
echo CloBa "%slovo_poiksa%" He HaudeHo B qpauJLe "%file_poiksa%".
pause
exit
:slovo
set /a counter_bykv=0
:bykv
call set bykva=%%str:~%counter_bykv%,1%%
::Здесь можно проверку поставить, буква это или нет. Но, это самый простой пример, доделывайте сами.
::Также регистр учитывается. ("Cmd" и "cmd" различаются)
if "%bykva%"=="" (if "%slovo%"=="%slovo_poiksa%" (goto finish) else (set slovo=&exit /b))
if not "%bykva%"==" " (set slovo=%slovo%%bykva%) else (if "%slovo%"=="%slovo_poiksa%" (goto finish) else (set slovo=))
set /a counter_bykv+=1
goto bykv
:finish
echo B %counter_strok% cTpoke HauDeHo CloBo "%slovo%".
pause
exit
Добавлено через 26 минут
Ну, а с вопросом, что у тебя не так. Вообще у тебя комментарии и след. команды написаны без &, хотя может быть и так можно.И вообще for стандартно делит файл на строки, чтоб делить на подстроки надо использовать tokens, например tokens=1, это первая подстрока(слово).
P.S. понял что мой код туфта...ну это я погорячился, только 1 строки не хватает работает только с поиском слов, разделенных через пробел, по правильному надо каждый раз как добавил символ проверять на сходство.

После 17 строки вставь if "%slovo%"=="%slovo_poiksa%" goto finish, ну и проверку на слова можно затирать, оставить только проверку на конец строки.
Погоди так тоже не выйдет....блин. придется перебирать все комбинации. например "kot 456": k,o,t, ,4,5,6,ko,ot,t , 4,45,56,kot,ot ,t 4, 45,456.
Так что надо 2 версии сдлеать, для поиска слов, и для поиска просто комбинации символов(тогда можно считать число символов и проверять только с тем же количеством комбинации).
Ща попробую
1
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
22.11.2011, 09:52  [ТС] 9
Отлично, благодарю! Если бы еще с циклом for сделать, то вообще было бы замечательно!
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
22.11.2011, 11:37 10
Это без for, это реализация поиска комбинаций. Хоть "Р А" ищи. Но со спец символами осторожнее.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
set /p slovo_poiksa="BBeduTE CJLoBo DJL9 /7oucka: "
set /p file_poiksa="BBeduTE qpauJL DJL9 /7oucka: "
set /a n_bykv=0
:n
call set b=%%slovo_poiksa:~%n_bykv%,1%%
if not "%b%"=="" (set /a n_bykv+=1&goto n)
set /a counter_strok=0
:strok
type %file_poiksa% | more +%counter_strok% > "tmp.txt"
set /a counter_strok+=1
set /p str="" < "tmp.txt" && (call :slovo "%str%"&goto strok)
echo CloBa "%slovo_poiksa%" He HaudeHo B qpauJLe "%file_poiksa%".
pause
exit
:slovo
set /a counter_bykv=0
:bykv
set /a er=%counter_bykv%+%n_bykv%-1
call set bykva=%%str:~%er%,1%%
if "%bykva%"=="" exit /b
call set slovo=%%str:~%counter_bykv%,%n_bykv%%%
if "%slovo%"=="%slovo_poiksa%" goto finish
set /a counter_bykv+=1
goto bykv
:finish
echo B %counter_strok% cTpoke HauDeHo CloBo "%slovo%".
pause
exit
Ну и конечно тоже просто реализовать, чтобы выдало не первый результат, а все.

Добавлено через 11 минут
Ну так вы почти сделали, жалко правда tokens=%%a не работает. ну чтож ловите.

Добавлено через 23 минуты
Ты ж в cc просто номер результата или в какой строке?

Добавлено через 2 минуты
Тут тебе и номер и предложение и подстрока.
Номер строки не считая пустых, так уж for устроен. В моей вообще, если пустые встречаются думает что конец.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
set cc=0
set /a n=0
for /f "tokens=*" %%i in (1.txt) do (call :x "%%i")
pause
exit
:x
set /a n+=1
set /a q=0
:m
set /a q+=1
for /f "tokens=%q%" %%j in ('echo %~1') do (if "%%j"=="new" (set /a cc=cc+1&echo ^#!cc!^ %n% stroka %q% podstroka: %1) else (goto m))
exit /b
Добавлено через 32 минуты
Версия поиска без for. Работает с пустыми строками и спецсимволами кроме ".
Кому интересно
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off
if "%1"=="" goto :EOF
if "%2"=="" goto :EOF
::Из спец символов можно использовать:  .,-+=_?!:;~`@#№$%^&*(){}[]/\|' , но " - двойные кавычки его убивают, с этим со временем разберусь.
setlocal
set slovo_poiksa=%~1
set file_poiksa=%2
set /a n_bykv=0
if exist "%tmp%\tmp.txt" del /a /f /q "%tmp%\tmp.txt"
:n
call set b="%%slovo_poiksa:~%n_bykv%,1%%"
if not %b%=="" (set /a n_bykv+=1&goto n)
set /a counter_strok=0
:strok
type %file_poiksa% | more +%counter_strok% > "%tmp%\tmp.txt"
set /a counter_strok+=1
set /p str="" < "%tmp%\tmp.txt"
for /f "tokens=*" %%i in ('dir /a /b /-c "%tmp%\tmp.txt"') do (if  "%%~zi"=="0" goto net)
call :slovo "%str%"
set str=
goto strok
:net
if not "%l%"=="1" echo CloBa "%slovo_poiksa%" He HaudeHo B qpauJLe %file_poiksa%.
endlocal
goto :EOF
:slovo
set /a counter_bykv=0
:bykv
set /a er=%counter_bykv%+%n_bykv%-1
call set bykva="%%str:~%er%,1%%"
if %bykva%=="" exit /b
if %bykva%=="~%er%,1" exit /b
call set slovo="%%str:~%counter_bykv%,%n_bykv%%%"
if %slovo%=="%slovo_poiksa%" goto finish
set /a counter_bykv+=1
goto bykv
:finish
set l=1
echo B %counter_strok% cTpoke "%str%"
exit /b


P.S в версии с for выбирай чем будут разделены слова (стандартно это пробел, tab) командой delims=, куда ее пихать и что в нее пихать читай for /?. p.s.s Например:
Windows Batch file
1
"tokens=%q% delims=.,!?-:() "
пробел всегда в конец пихай.

Добавлено через 10 минут
ааааааааа () не работает, только одну скобку можно.
1
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
22.11.2011, 23:28  [ТС] 11
Цитата Сообщение от Ris
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
set cc=0
set /a n=0
for /f "tokens=*" %%i in (1.txt) do (call :x "%%i")
pause
exit
:x
set /a n+=1
set /a q=0
:m
set /a q+=1
for /f "tokens=%q%" %%j in ('echo %~1') do (if "%%j"=="new" (set /a cc=cc+1&echo ^#!cc!^ %n% stroka %q% podstroka: %1) else (goto m))
exit /b
этот код почемуто неработает!
Кстати, а почему кусок кода что ниже нехочет выводить подстроки из строк?
Bash
1
2
3
4
5
6
7
8
@echo off
 
set /a n=1
 
for /f "tokens=*" %%i in (1.txt) do (
@for /f "tokens=%n%" %%j in ("%%i") do (echo %%j & set /a n+=1))
 
echo on
здесь только первые слова показывает из всей строки! также как и здесь
Bash
1
2
3
4
5
6
7
8
9
@echo off
 
set /a n=1
 
for /f "tokens=%n%" %%i in (1.txt) do (echo %%i & set /a n+=1)
 
echo %n%
 
echo on
ведь вроде n увеличивается с каждым новым циклом! и должна указывать на новую подстроку в строке!
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
23.11.2011, 08:57 12
Я пробовал у меня в for "tokens= не поддерживает отложенную обработку, блин, забыл как называется, короче когда !x!. (setlocal enabledelayedexpansion).
По этому я использовал call.

Попробуйте после @echo off вставить setlocal enabledelayedexpansion.
То есть, вот так
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
setlocal enabledelayedexpansion
set cc=0
set /a n=0
for /f "tokens=*" %%i in (1.txt) do (call :x "%%i")
pause
exit
:x
set /a n+=1
set /a q=0
:m
set /a q+=1
for /f "tokens=%q%" %%j in ('echo %~1') do (if "%%j"=="new" (set /a cc=cc+1&echo ^#!cc!^ %n% stroka %q% podstroka: %1) else (goto m))
exit /b
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
23.11.2011, 19:39  [ТС] 13
Незнаю, у меня этот код опять чтото неработает! Впринципе смысл немного понял его, но неработает. Пишет, что "Непредвиденное появление in"
Неужели нельзя проще сделать как-то, например с двумя циклами for и if ?
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
23.11.2011, 20:59 14
Через for конечно можно все cделать, но проблема то в том что батник на первой попавшейся случайной кавычке" или скобке) закроется.
Поэтому на батнике лучше так не делать.
0
23.11.2011, 20:59
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2011, 20:59
Помогаю со студенческими работами здесь

Поиск слова в нескольких текстовых файлах
Здравствуйте уважаемые форумчане. Есть папка с неизвестным (постоянно меняется) количеством...

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

Поиск слова в текстовых файлах Word
У Меня очень большая коллекция видео на Болванках, можете ли подсказать программу, с помощью...

Подсчет частоты повторений каждого слова во всех текстовых файлах указанного каталога (*.txt)
Не знаю как указать каталог и перебрать все файлы в нем sed -e 's/\.//g' -e 's/ /\ /g' &quot;$1&quot; |...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru