Как бы дата в HTML файле с использованием сценария .bat - PullRequest
3 голосов
/ 10 апреля 2020

У меня есть. html файл titlepage.html, который содержит следующую строку:

<span class="titlepage modified">Modified: Feb 13, 2020 </span>

Проблема в том, что иногда я забываю изменить «Изменено»: date

Я запускаю файл .bat, который перемещает этот titlepage.html в нужное место, поэтому я подумал, что имеет смысл добавить подпрограмму в файл .bat для обновления даты перед ее перемещением.

мой текущий файл .bat выглядит следующим образом:

@echo off
setlocal enabledelayedexpansion

set infile=titlepage.html
set outfile=result.html
Set find=Modified:
set replace="<span class="titlepage modified">Modified: %DATE% </span>"

del result.html

for /F "tokens=1,2 delims=" %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
echo !TMPR!>>%outfile%
)

И эта строка для меня выглядит следующим образом: <span class="titlepage modified">"<span class="titlepage modified">Modified: 04/10/20 </span>" Feb 13, 2020 </span>

Таким образом, он успешно вводит информацию, которую я хочу, но Мне нужно, чтобы он заменил всю рассматриваемую строку, а не только часть, которую я использовал для поиска.

* Обратите внимание, что даты будут произвольными, поэтому я не могу выполнить поиск по всей строке.

Итак, я хочу: 1. Найти строку, содержащую строку 2. Заменить всю эту строку моим новым вводом.

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

1 Ответ

2 голосов
/ 11 апреля 2020
@echo off
setlocal enabledelayedexpansion

set "target=./titlepage.html"
set "destination=./titlepage.html"
set "find=(?mi)^.*Modified:.*$"
set "replace=<span class=\"titlepage modified\">Modified: %DATE% </span>"

powershell -noprofile -command^
 $content=get-content -path '!target!';^
 $result=$content -replace '!find!', '!replace!';^
 set-content -path '!destination!' -value $result

powershell читает целевой объект ./titlepage.html, выполняет замену и записывает в целевой адрес ./titlepage.html.

Шаблон регулярного выражения ищет Modified: в строке. Переменная find содержит шаблон и использует опции (?mi). m - это многострочный режим, а i - без учета регистра. Если вы хотите, чтобы регистр не учитывался, удалите i.

Шаблон регулярного выражения:

  • (?mi) Параметры регулярного выражения. m является многострочным, а i нечувствительным к регистру.
  • ^ По умолчанию совпадение должно начинаться с начала строки; в многострочном режиме он должен начинаться с начала строки.
  • . Подстановочный знак: соответствует любому отдельному символу, кроме \ n.
  • * Соответствует предыдущему элементу ноль или более раз .
  • $ По умолчанию совпадение должно происходить в конце строки или до \ n в конце строки; в многострочном режиме это должно происходить до конца строки или до \ n в конце строки.

Строка замены:

  • \" Вложенный Escape двойная кавычка для синтаксического анализа командной строки powershell.

Для получения дополнительной информации см. Язык регулярных выражений - Краткий справочник .

^ в конец строки команды powershell является продолжением строки.

...