Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [BAT, командный файл]Поиск в нескольких txt файлах


Автор: Alenka 4.6.2007, 14:24
Есть вот такая вот задачка:
 Написать командный файл для поиска строки в нескольких текстовых файлах (использовать команду FIND). Строка для поиска, а также имена файлов задаются в командной строке. В командном файле использовать не более двух формальных параметров: %1 %2. Результаты по выбору пользователя вывести на экран или в файл RESULT.TXT (команда CHOICE). Проверить существование каждого файла. 

Решение получается только такое:
Код
Код



echo off
if -%1 == - goto error1
if -%2 == - goto error2
if not exist %1 goto error3
if exist result.txt goto menu2

:menu
cls
echo                     ***MENU***
echo ---------------------------------------------
echo 1 - Find and show results on screen
echo 2 - Find and show results in file
echo X - Exit
echo ---------------------------------------------
be ask "Your select: ", 123X
if errorlevel 3 goto exit
if errorlevel 2 goto find2
if errorlevel 1 goto find1

:menu2
cls
echo                     ***MENU***
echo ---------------------------------------------
echo 1 - Find and show results on screen
echo 2 - Delete file with the results
echo X - Exit
echo ---------------------------------------------
be ask "Your select: ", 123X
if errorlevel 3 goto exit
if errorlevel 2 goto delres
if errorlevel 1 goto find1

:error1    
cls
echo        -------------------------------
echo         YOU DON'T ENTER NAME OF FILES
echo        -------------------------------
if -%2 == - goto error4 
goto exit

:error2
cls
:error4
echo    ---------------------------------------
echo     YOU DON'T ENTER WHAT DO YOU WANT FIND
echo    ---------------------------------------
goto exit

:error3
cls
echo          -------------------------
echo           FILE OR FILES NOT EXIST
echo          -------------------------
goto exit

:find1
find /I "%2" %1
pause 
goto menu

:find2
find /I "%2" %1 > result.txt
pause 
goto menu2

:delres
del result.txt
pause 
goto menu

:exit
pause
exit


Как вы наверное уже поняли bat сделан только для поиска в одном файле... Как сделать в нескольких я не знаю... Cделать find с for не выходит... Параметров можно сделать только два (shift как я поняла тут тоже не сработает)...
Что делать ума не приложу...
Мальчики, кто-нибудь помогите... Большое пожалуйста !!! :(

Автор: S.A.G. 4.6.2007, 15:00
В условии сказано что нужно искать в нескольких файлах. Но там же написано что параметров должно быть два, т.е. имя файла и строка для поиска. Если параметров может быть больше то, просто сделайте тоже самое и со всеми другими параметрами содержащими название файла. Тоесть так:

Код

:find1
find /I "%2" %1
find /I "%3" %1
pause 
goto menu

:find2
find /I "%2" %1 > result.txt
find /I "%3" %1 > result.txt
pause
goto menu2


Если параметров может быть только два то ваша задача решена.

Или я неправильно понял условие.

Автор: Alenka 4.6.2007, 19:32
Цитата(S.A.G. @ 4.6.2007,  15:00)
В условии сказано что нужно искать в нескольких файлах. Но там же написано что параметров должно быть два, т.е. имя файла и строка для поиска. Если параметров может быть больше то, просто сделайте тоже самое и со всеми другими параметрами содержащими название файла. Тоесть так:

Код

:find1
find /I "%2" %1
find /I "%3" %1
pause 
goto menu

:find2
find /I "%2" %1 > result.txt
find /I "%3" %1 > result.txt
pause
goto menu2


Если параметров может быть только два то ваша задача решена.

Или я неправильно понял условие.

Нет к сожалению так не получится:
Во-первых %3 это уже третий формальный параметр (что противоречит условию)
Во-вторых ищем мы одну и ту же строку (параметр %2) в нескольких txt файлах (параметр %1) и файлов этих, должна быть возможность, указать любое количество (так параметров не хватит, и shift тут не поможет)... 
Вся проблема в том что надо как-то уместить в одном формальном параметре %1 список из нескольких txt фалов и затем этот список передать в for find...

Автор: apook 5.6.2007, 10:15
Вариантов может быть куча, один из нх апример передать
с параметром директорий где эти файлы лежат

в батнике пишешь
Цитата

@echo off
for %%x in ( %1\*.txt ) do type %%x | find /i "ABCDEF"
pause


запускаешь
test.bat .
произведется поиск в текущем директории всех файлов с расширением txt
и если есть строка ABCDEF она выведется 

Автор: Alenka 5.6.2007, 15:35
Миленькие ну не могу я задавать в командной строке ничего кроме ИСКОМОЙ СТРОКИ и ИМЕН TXT ФАЙЛОВ (которых может быть любое количество)... Не могу я задавать никаких директорий (т.к. противоречит заданию + искать надо не во всех txt а в указанных в командной строке)...

Я не могу понять как засунуть в %1 скажем 1.txt 2.txt 3.txt и передать их в for find...

Может есть какие-нибудь шаблоны записи, о которых я не знала?  

Автор: apook 6.6.2007, 01:30
Цитата

for /F "delims=" %%x in ( %2 ) do type %%x | find /i "%1" 


Забыл добавить-Если хочешь чтоб параметр командной строки содержал
пробелы заключи его в кавычки напр: "1.txt 2.txt 3.txt 4.txt"
Это относится не только к батникам но и к eкзешникам и вообще это общепринятое правило.

Автор: Alenka 6.6.2007, 07:52
OK пасибо! Буду пробовать!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)