2016-01-22 3 views
0

Я хочу написать командный файл (.bat). Используя пакетный файл, я хочу искать уникальный текст в текстовом файле и печатать строку, содержащую текст, в окне консоли в качестве вывода. Критерии поиска - это пользовательский ввод.Поиск текста в текстовом файле и печать в приглашении CMD с использованием командного файла

Какой пакетный код требуется для выполнения этой задачи?

Ниже приведено содержимое файла .txt.

«Командная строка, также известный как cmd.exe или ЦМД (после его имени исполняемого файла), интерпретатор командной строки в Windows NT, Windows CE, OS/2 и eComStation операционных систем. Это является аналогом COMMAND.COM в системах DOS и Windows 9x (где он также называется «MS-DOS Prompt») и аналогичен оболочкам Unix, используемым в Unix-подобных системах. Первоначальная версия командной строки для Windows NT была разработанное Therese Стоуэллы. [1]»

Я хочу написать пакетный скрипт, используя стандартные команды Windows, где пользователь вводит строку поиска как Windows CE и й Вся строка с этой строкой выводится в окне командной строки.

Например, на входах пользователей Windows CE вывод должен быть:

is the command-line interpreter on Windows NT, Windows CE, OS/2 and eComStation 
+0

@Mofi: Ваша правка изменила первоначальный смысл вопроса. В форматировании «улучшенного текста» легко видеть, что желаемый вывод является второй строкой файла .txt, но исходный вопрос описывает совершенно другую проблему! Я не знаю, какие критерии поиска используются OP для извлечения такой части из файла .txt, поэтому я спросил пользователя об этом моменте, но IMO модифицирует входные данные таким образом, чтобы он соответствовал тому, что вы думаете - это поиск критерии не являются правильным способом понять эту проблему ... – Aacini

+0

@Mofi: Обратите внимание, что Windows Notepad не показывает однострочный файл, как он появляется в модификации «улучшенного текста», но исходное форматирование OP полностью верный в этом смысле. – Aacini

+0

@ Zoso619 Каковы правила, определяющие, какая часть длинного абзаца, хранящегося в текстовом файле в одной строке, должна выводиться на консоль при поиске строки поиска в этом абзаце? – Mofi

ответ

1

Вам не нужно создать пакетный файл для этой функции. Он уже существует в инструменте find во всех версиях Windows, который можно вызвать из любого приглашения cmd. Вот некоторые подробности о том, как использовать его: How to Use Find from the command prompt

EDIT НА ОСНОВЕ КОММЕНТАРИЕВ:

Синтаксис find довольно проста. Вы, кажется, знаете файл, который вы хотите найти, и вы знаете, как предложить пользователю строки:

set /P search_string= Enter the string you would like to search for: 
find "%search_string%" C:\ServiceLog%_store%.txt 
+0

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

+0

. Затем просто вызывайте 'find' из вашего пакетного файла с нужным параметры. –

+0

Вы могли бы поделиться своим кодом с приведенным выше примером, о котором я упомянул? Я очень новичок в пакетном программировании. Ценю вашу помощь. – Zoso619

1

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

@echo off 
setlocal EnableDelayedExpansion 

set /P "userString=Enter the search string: " 

rem Process all lines in file 
for /F "delims=" %%a in (input.txt) do (
    set "line=%%a" 

    rem Split all phrases in line 
    call :splitPhrases 

    rem Process each phrase 
    for /L %%i in (1,1,!numPhrases!) do (

     rem If the user string appears in this phrase 
     if "!phrase[%%i]:%userString%=!" neq "!phrase[%%i]!" (
     rem ... show it 
     echo !phrase[%%i]! 
    ) 

    ) 
) 
goto :EOF 


:splitPhrases 
set "numPhrases=0" 

:nextPhrase 
    for /F "tokens=1* delims=.," %%a in ("!line!") do (
     set /A numPhrases+=1 
     set "phrase[!numPhrases!]=%%a" 
     set "line=%%b" 
    ) 
if defined line goto nextPhrase 
exit /B 

Выходной пример:

Enter the search string: Windows CE 
Windows CE 

Если вы хотите лучшего ответа, пожалуйста, напишите лучшие вопросы ...