Переименование HTML-файла на основе содержимого из файла с помощью пакетного файла
Мне нужен командный файл, который читает строку текста в html-файле, а затем переименовывает это имя файла в зависимости от того, что он находит.
У меня есть большое количество HTML-файлов, где их имена, например, просто numbers.html (2345.html).
Внутри каждого html-файла есть строка, которая выглядит примерно так: пример 1 - <span class="term-name">fed up</span>
пример 2 - <span class="term-name">ventilating</span>
Как я могу получить командный файл, чтобы найти строку, содержащую <span class="term-name">
а затем переименуйте файл в слова, которые после и до </span>
,
В моем примере, приведенном выше, будет создан файл с именем 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> " file.html`
Что означает найти строку <span class=\"term-name\">ventilating</span>
в файле 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> " 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
команда.