2009-08-17 7 views
0

Вопрос о Batch/Windows/CMD:Найти строку в текстовом файле, проверить текст между ними?

Я хотел бы, что мой пакетный файл можно выполнить поиск строки (который я уже достигнута, но что дальше нет), это выглядит следующим образом:

<name>MyName</name> 

Необходимо найти текст между < > и </name >. После этого ему нужно установить это как переменную (% name%).

У кого-нибудь есть идеи?

EDIT: если кто-то хочет дать ответ, пожалуйста, перечислите код. Perl в порядке, но это должно быть с открытым исходным кодом, и не у всех есть Perl.

+0

Если вы приложите текст, похожий на код, в обратном направлении (символ ''), вы можете отображать то, что вы набираете дословно. Это позволит избежать путаницы - мне пришлось несколько раз прочитать ваш вопрос, чтобы понять, что вы заменяете круглые скобки для угловых скобок. –

ответ

3

Это может быть сделано таким образом (предполагается, что ваш вход в файле «test1.html»):

findstr "<name>" test1.html > temp1.lis 
FOR /F "tokens=2 delims=>" %%i in (temp1.lis) do @echo %%i > temp2.lis 
FOR /F "tokens=1 delims=<" %%i in (temp2.lis) do @echo %%i > temp3.lis 

Первая линия охранником, что только HTML/XML тег «имя» будет совпадать две линии FOR (вы можете уже сделали это). Результат сохраняется во временном файле «temp1.lis».

Вторая строка, что находится справа от первого «>» - фактически, что после «< name>». На этом этапе «MyName </name» остается во временном файле «temp2.lis» (как закрывающий тег также содержит «>»). Обратите внимание на двойной «%» s (%% i), поскольку он находится в файле BAT (если вы хотите напрямую проверить из командной строки, тогда он должен быть только «%»).

Захват третьей линии, что находится слева от первого «<» - это желаемый результат: «MyName» (осталось «<» в «MyName </имя»). Результат - в переменной %% i, и вы можете вызвать функцию с %% i в качестве параметра и получить результат в этой функции (в строке FOR над функцией было встроенное «эхо» и результат Таким образом, в конечном итоге в временных файлов «temp3.lis» путем перенаправления стандартного выхода)


Обратите внимание, что выше только работает, если

<name>MyName</name> 

является первым HTML/XML тег в линия.

Если это не так или вы хотите более надежное решение , вы можете вместо этого вызвать функцию в первой строке FOR (то, что получает %% i в качестве первого параметра). Эта функция может затем заменить «< имя>» на один символ, который вы уверен, что нет на входе, например.:

set RLINE=%MYLINE:<name>=£% 

Пояснение: если строка ввода в переменной% MYLINE%, то «< имя>» будет заменено на «Е», и результат будет присваивается переменной% RLINE%.

Причина замены заключается в том, что разделители для цикла FOR имеют только один символ.

Вы можете использовать «Е» в качестве разделителя в цикле (для извлечения, что справа от «< имени>» - как раньше):

echo %RLINE%>temp5.lis 
FOR /F "tokens=2 delims=£" %%i in (temp5.lis) do @echo %%i > temp6.lis 

Вы должны повторить это техника для "</name>" (но только если < имя> MyName </name> не первый тег HTML/XML в строке).

Как видите, это возможно, но это довольно болезненно.

+0

вы говорите, что выше работает только если это первая строка ... но вы используете findstr, так что он ищет в документе удержания правильно? –

+0

Нет, не первая строка. Первый тег в строке. Если строка содержала « Несвязанный контент еще несколько слов MyName", тогда относительно простое первое решение не сработало. –

+0

Можете ли вы перечислить некоторые примеры ввода в свой вопрос? –

0

Изучите Perl, он сделан именно для этого.

+0

Теперь у вас есть 2 проблемы. http://blogs.msdn.com/oldnewthing/archive/2006/03/22/558007.aspx – RossFabricant

+0

Нет, действительно, Perl отлично подходит для управления текстовыми файлами. Позвольте мне добавить к вашей шутке: просто использование компьютера дает вам две проблемы. Открытие браузера и включение вопроса на SO дает вам две проблемы. Если вы не хотите научиться пользоваться хорошими инструментами, удачи в достижении чего-либо. – mcandre

+0

ссылка, которую вы даете, просто «немного» устарела ... я знаю, что вы собираетесь сказать «это основы» ... Но если вы хотите дать мне учебник, пожалуйста, дайте мне более обновленную версию, хорошо , Но спасибо в любом случае. –

Смежные вопросы