Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [BAT, командный файл]Поиск в нескольких txt файлах, Никак не могу преодолеть одну тонкость. 
V
    Опции темы
Alenka
Дата 4.6.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



Есть вот такая вот задачка:
 Написать командный файл для поиска строки в нескольких текстовых файлах (использовать команду 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 как я поняла тут тоже не сработает)...
Что делать ума не приложу...
Мальчики, кто-нибудь помогите... Большое пожалуйста !!! :(

Это сообщение отредактировал(а) Alenka - 4.6.2007, 14:26
PM   Вверх
S.A.G.
Дата 4.6.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



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

Код

: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


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

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

Это сообщение отредактировал(а) S.A.G. - 4.6.2007, 15:11


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Alenka
Дата 4.6.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



Цитата(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...
PM   Вверх
apook
Дата 5.6.2007, 10:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



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

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

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


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


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Alenka
Дата 5.6.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



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

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

Может есть какие-нибудь шаблоны записи, о которых я не знала?  
PM   Вверх
apook
Дата 6.6.2007, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Цитата

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


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

Это сообщение отредактировал(а) apook - 6.6.2007, 05:46


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Alenka
Дата 6.6.2007, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



OK пасибо! Буду пробовать!  smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.