Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выделить подстроку (URL) из файла (http://forum.oszone.net/showthread.php?t=211903)

vitna 25-07-2011 17:10 1719633

Выделить подстроку (URL) из файла
 
Вложений: 1
Добрый день,
помогите решить проблему)))
Есть некий текстовый файл (см. атач) из которого необх. выделить URL, соответствующий "KAT-RU",
т.е. на выходе надо получить "чистый" URL (без кавычек и запятой в конце)
http://devbuilds.kaspersky-labs.com/...7_25_07_22.exe

Заранее спасибо!

Anonymоus 25-07-2011 17:51 1719661

Код:

@Echo Off
Set File=index.txt

:: Получаем номер строки с нужной локализацией
For /F "tokens=1 delims=:" %%A In ('Findstr /N "KAT-RU" "%File%"') Do (Set /A Line=%%A-1)
:: Получение содержимого строки, замена двойных кавычек, вычленение url
For /F "skip=%Line% tokens=*" %%A In (%File%) Do (Set Url=%%A&GoTo Break)
:Break
Set Url=%Url:"=+%
For /F "tokens=1,2,3 delims=+" %%A In ("%Url%") Do (Set Url=%%C)

Echo %Url%
Pause>nul


vitna 26-07-2011 13:35 1720177

Спасибо, за помощь!
А как быть, если исходный файл предствален в виде HTML страницы с тегами (<>)?
При попытке воспользоваться приведенным советом, выдает ошибку (Ошибка в синтаксисе команды) из-за этих тегов.

Т.е. Как "распарсить" вот такую строку, выделив из нее имя файла?

26 Jul 2011 05:33:47 99681144 <a href="setup_11.0.0.1245.x01_2011_07_26_09_23.exe">setup_11.0.0.1245.x01_2011_07_26_09_23.exe</a>

Anonymоus 26-07-2011 15:53 1720299

Вот этот скрипт распарсит html-файл и выделит всё, что находится внутри a href="ссылка", производится проверка на расширение файла по ссылке. К сожалению, обойтись без использования одного временного файла не получилось. В данном примере ссылки выводятся Echo, вы уже сами перенаправьте их, куда нужно.
Код:

@Echo Off
Set File=index.txt
SetLocal EnableDelayedExpansion
For /F "tokens=*" %%A In ('sed "s/.*href=.//" %File%') Do (Echo %%A>>tmp)
For /F "tokens=*" %%A In ('sed "s/.>.*$//" tmp') Do (
Set String=%%A
If /I "!String:~-4!"==".exe" Echo %%A
)
Del tmp

Pause>nul

Для работы скрипта нужен sed, входящий в пакет утилит GnuWin32 core utils. Скачать его можно здесь (сам sed и нужные dll) или здесь (официальная страница на sourceforge)


Время: 15:12.

Время: 15:12.
© OSzone.net 2001-