Переименование HTML-файла на основе содержимого из файла с помощью пакетного файла

Мне нужен командный файл, который читает строку текста в html-файле, а затем переименовывает это имя файла в зависимости от того, что он находит.

У меня есть большое количество HTML-файлов, где их имена, например, просто numbers.html (2345.html).

Внутри каждого html-файла есть строка, которая выглядит примерно так: пример 1 - <span class="term-name">fed up</span>&nbsp;&nbsp;

пример 2 - <span class="term-name">ventilating</span>&nbsp;&nbsp;

Как я могу получить командный файл, чтобы найти строку, содержащую <span class="term-name"> а затем переименуйте файл в слова, которые после и до </span>&nbsp;&nbsp;,

В моем примере, приведенном выше, будет создан файл с именем ventilating.txt, а другой - с именем feed up.txt.

У меня есть пример, где он может найти строку в файле, как Description=Mike, а затем создает файл с именем Mike.txt. (см..bat ниже)

Но я не могу понять, как выбрать слова из моих примеров выше.

    @echo off

for %%i in (%1) do (
  for /f "tokens=2 delims==" %%j in ('findstr /B /I "Description=" "%%i"') do (
    ren "%%i" "%%j.temp_txt"
  )
)

ren *.temp_txt *.txt

3 ответа

Вы можете попробовать команду:

findstr /c:"<span class=\"term-name\">ventilating</span>&nbsp;&nbsp;" file.html`

Что означает найти строку <span class=\"term-name\">ventilating</span>&nbsp;&nbsp; в файле file.html и, конечно, вы можете найти любую строку, которую вы хотите. Выходные данные должны соответствовать строке, если эта команда успешно завершена. Затем вы можете разобрать слово ventilating по команде:

for /f "tokens=2,3* delims=><" %a in (%t%) do echo %a`

куда %t% содержит соответствующую строку вывода первой командой и %a это слово, которое вы хотите.

Наконец, команда должна выглядеть следующим образом:

for /f "usebackq tokens=2,3* delims=><" %a in (`findstr /c:"<span class=\"term-name\">ventilating</span>&nbsp;&nbsp;" file.html`) do @echo %a`

И вы получите слово в консоли. Конечно, вы можете переименовать ваш файл:

rename file.html %a.html

Кроме того, если эти команды будут использоваться в скрипте, один % следует заменить на двойной % как %%a,

Пожалуйста, дайте мне знать, если возникнут вопросы.

В основном то, что вы хотите, это HTML Parser можно использовать из командной строки (и так в скриптах bash).

Например, вы можете взглянуть на https://github.com/ericchiang/pup, который является cli HTML Parser,

Вы можете использовать этот инструмент в своем примере, например так:

$ cat numbers.html | pup 'span.term-name text{}'

Больше информации об этом в README.md.

Предположив:

  • файл HTML или шаблон файла задается в качестве аргумента командной строки;
  • есть только один тег <span> в строке соответствия;
  • закрытие </span> тег находится в той же строке, что и соответствующий открывающий тег;
  • значение атрибута class не содержит < или же > персонажи;
  • первая строка соответствия каждого обработанного файла должна быть взята;
  • файл (ы) могут обрабатываться без учета регистра;

следующий код должен работать для вас:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

for %%I in ("%~1") do (
    set "LINE="
    for /F delims^=^ eol^= %%J in ('
        findstr /I /R /C:"<span  *class=[^<>]*>..*</span>" "%%~fI"
    ') do (
        if not defined LINE (
            set "LINE=%%J"
            setlocal EnableDelayedExpansion
            set "LINE=!LINE:*<span =!"
            for /F "tokens=2 delims=<>" %%K in ("!LINE!") do (
                endlocal
                ECHO ren "%%~fI" "%%K%%~xI"
            )
        )
    )
)
endlocal
exit /B

Этот скрипт возвращает ren командная строка для консоли в целях тестирования. Чтобы фактически переименовать любые файлы, удалите верхний регистр ECHO команда.

Другие вопросы по тегам