2012-02-19 2 views
0

Задача в CMD.Получить строку из файла в партии

1) Как я могу сравнить, если строка в строке? Я проверил руководство here для «Boolean Test», существует ли строка? »« Но я не могу понять этот пример, или он не работает для меня. Этот кусок кода, это просто попытка. Я пытаюсь сделать сравнение строк фильтра с некоторым количеством укусов, если в строке есть тег <a>.

FOR /f "tokens=* delims= usebackq" %%c in ("%source%") DO ( 
echo %%c 
IF %%c == "<a" (pause) 
) 

Поэтому, пока я читаю файл, он должен быть приостановлен, если есть ссылка на строку.

2) У меня есть еще один вопрос. Мне нужно будет отфильтровать линию, если в ссылке есть определенный файл, и получить содержимое ссылки. Моя первоначальная идея состояла в том, чтобы попытаться использовать findstr с регулярным выражением, но, похоже, не использует под-шаблоны. И следующая проблема будет заключаться в том, как получить результат переменной.

set "pdf=0_1_en.pdf" 
type "%source%" | grep "%pdf%" | findstr /r /c:"%pdf%.*>(.*).*</a>" 

Таким образом, в заключение, я хочу, чтобы пройти через файл и, если есть ссылка, как это: РЕМОНТА: *

<a href="/Dokumenter/dsweb/Get/Document-408/EK_GEN_0_1_en.pdf" class="uline"><b>GEN 0.1 Preface</b></a> 
  • Я забыл стиль это как код, так внутренняя часть кода не отображалась. Сожалею.
  • Предупреждение: мы не знаем путь, только основное имя файла.

Получить название GEN 0.1 Предисловие. Но вы должны знать, что есть также похожие ссылки с той же ссылкой, которые содержат изображение, а не текст внутри тега.

код в соответствии Aacini быть изменен немного:

@echo off 
setlocal EnableDelayedExpansion 
set "source=GEN 0 GENERAL.html" 
set "pdf=0_1_en.pdf" 
echo In file:%source% 
echo Look for anchor:%pdf% 

rem Process each line in %source% file: 
for /F "usebackq delims=" %%c in ("%source%") do (
    set "line=%%c" 
    rem Test if the line contain a "tag" that start with "<a" string: 
    set "tag=!line:*<a=!" 
    if not "!tag!" == "!line!" (
     rem Take the string in tag that end in ">" 
     for /F "delims=^>" %%a in ("!tag!") do set "link=%%a" 
     echo Link found: !link! 
     if "!link!" == "GEN 0.1 Preface" echo Seeked link found 
    ) 
) 
pause 

Все еще не закончили

+0

Вы должны начать принимать ответы – jeb

ответ

1

Хотя ваш вопрос обширен он не обеспечивает много детали, поэтому я предположил, несколько точек, потому что я не знаю слишком много о .PDF файлов, теги и т.д.

@echo off 
setlocal EnableDelayedExpansion 
set "source=GEN 0 GENERAL.html" 
set "pdf=0_1_en.pdf" 
echo In file: "%source%" 
echo Look for anchor: "%pdf%" 

rem Process each line in %source% file: 
for /F "usebackq delims=" %%c in ("%source%") do (
    set "line=%%c" 
    rem Test if the line contain "<a>" tag: 
    set "tag=!line:*<a>=!" 
    if not "!tag!" == "!line!" (
     rem Test if "<a>" tag contain the anchor pdf file: 
     if not "!tag:%pdf%=!" == "!tag!" (
     rem Get the value of "<b>" sub-tag 
     set "tag=!tag:<b>=$!" 
     set "tag=!tag:</b>=$!" 
     for /F "tokens=2 delims=$" %%b in ("!tag!") do set title=%%b 
     echo Title found: "!title!" 
    ) 
    ) 
) 
pause 

Любой недостающий пункт может быть добавленным или исправленным, если вы дадите мне точную информацию о них.

EDIT: Я исправил программу выше после последних указаний от OP. Я использовал $ character для получения значения Title; если этот символ может существовать в оригинальном теге, он должен быть изменен другим неиспользуемым.

Я тестировал эту программу с этим "GEN 0 GENERAL.html" Пример файла:

Line one 
<a>href="/Dokumenter/EK_GEN_0_X_en.pdf" class="uline"><b>GEN 0.X Preface</b></a> 
Line three 
<a>href="/Dokumenter/EK_GEN_0_1_en.pdf" class="uline"><b>GEN 0.1 Preface</b></a> 
Line five 

и получить этот результат:

In file: "GEN 0 GENERAL.html" 
Look for anchor: "0_1_en.pdf" 
Title found: "GEN 0.1 Preface" 

EDIT: Новый быстрый метод добавил

Существует более простой и быстрый метод решения этой проблемы, который, однако, может завершиться неудачно, если строка con не более одного тега:

@echo off 
setlocal EnableDelayedExpansion 
set "source=GEN 0 GENERAL.html" 
set "pdf=0_1_en.pdf" 
echo In file: "%source%" 
echo Look for anchor: "%pdf%" 

for /F "delims=" %%c in ('findstr /C:"<a>" "%source%" ^| findstr /C:"%pdf%"') do (
    set "tag=%%c" 
    rem Get the value of "<b>" sub-tag 
    set "tag=!tag:<b>=$!" 
    set "tag=!tag:</b>=$!" 
    for /F "tokens=2 delims=$" %%b in ("!tag!") do set title=%%b 
    echo Title found: "!title!" 
) 
pause 
+0

Я запускаю скрипт, но никакого результата. См. Мое редактирование сообщения выше. Он должен найти тег a и проверить, есть ли файл pdf. Если «ОК», продолжайте фильтровать строку. Я забыл упомянуть, что я использую wingnu32 и могу использовать его. Но я хотел бы, чтобы ваш код был закончен, потому что мне интересно, если он сработает. – user1141649

+0

@ user1141649: Я изменил пакетный файл выше, соответственно, на ваши последние изменения. Я думаю, что это правильно работает сейчас; если да, не забудьте обойти Upvote и выбрать мой ответ как лучший ответ! – Aacini

+0

Я заметил ваш ответ позже, поэтому после отправки моего измененного кода. Я должен снова проверить ваш код, но теперь у нас есть два решения. Я выходил из вашего сценария. Я не знаю, где я должен щелкнуть, чтобы выбрать ваш ответ как лучший? И я думаю, что у меня недостаточно репутации для голосования. – user1141649

0

Во-первых, один важный вопрос: действительно ли это действительно должны быть реализованы с помощью сценария CMD? Вы могли бы пойти с VBScript, PowerShell, C# или другим языком сценариев/программирования? CMD - это печально известная среда сценариев.

Во-вторых, я не уверен, если это отвечает на ваш вопрос - это немного непонятно - но вот быстрый трюк вы можете использовать, чтобы увидеть в CMD, чтобы увидеть, если данная строка содержит другую подстроку:

setlocal enableextensions enabledelayedexpansion 

set PATTERN=somepattern 

for /f "delims=" %%f in (somefile.txt) do (
    set CURRENT_LINE=%%f 
    if "!CURRENT_LINE:%PATTERN%=!" neq "!TEMP!" (
     echo Found pattern in line: %%f 
    ) 
) 

Идея состоит в том, что вы пытаетесь выполнить замену строки и посмотреть, было ли что-либо изменено. Это, конечно, взломать, и было бы предпочтительнее, если бы вы могли использовать такой инструмент, как findstr или grep, но если вы ограничены в своих вариантах, то что-то вроде выше должно работать.

ПРИМЕЧАНИЕ: На самом деле я не выполнял вышеприведенный фрагмент сценария, поэтому дайте мне знать, если у вас есть какие-либо трудности с ним.

+0

я починил текст в моем сообщении, проверьте жирный текст ПОЧИНЕННЫЙ. Каким будет шаблон? – user1141649

0

Я изменил способ сделать это. Я понял, что лучше сначала найти имя pdf-документа. Это мое почти законченное решение, но я прошу вас, можете ли вы помочь мне с последним моментом. Последний оператор замены не работает, потому что мне нужно удалить закрывающий тег b. Просто чтобы получить титул.

@echo off 
setlocal EnableDelayedExpansion 
set "source=GEN 0 GENERAL.html" 
set "pdf=0_1_en.pdf" 
echo In file:%source% 
echo Look for anchor:%pdf% 

rem Process each line in %source% file: 
for /F "usebackq delims=" %%c in ("%source%") do (
    set "line=%%c" 
    REM Test if the line contains pdf file I look for: 
    SET "pdfline=!line:%pdf%=!" 


    if not "!pdfline!" == "!line!" (

     cls  
     echo Line: !line! 

     REM Test if the pdfline contains tag b 
     SET "tagline=!pdfline:*><b>=!" 

     if not "!tagline!" == "!pdfline!" (

     cls  
     echo ACTUAL LINE: !tagline! 

     REM Remove closing tag b 
     SET "title=!tagline:</b*=!" 
     echo TITLE: !title! 
     pause 
    ) 
    ) 
) 
pause 

КСТАТИ: HTML-страницы Я работаю с это here.

Поэтому я прошу вас, чтобы помочь полному/ремонт линии SET "title=!tagline:</b*=!"

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