Есть гораздо лучшие инструменты, доступные для решения этой проблемы.Но это возможно с пакетом Windows!
Предположим, что текст ниже - это самый внешний файл шаблона с именем TEMPLATE.HTML.Строка триггера содержимого может иметь отступ, но это решение не позволяет использовать дополнительные символы после триггера.(Это ограничение можно было бы устранить, но это замедлило бы работу)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample template for building a page</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<div id="content">
</div>
</body>
</html>
Пример файла содержимого ниже (с именем CONTENT_HTML.TXT) содержит переменные, указанные как! VarName!и пакетный файл будет использовать отложенное расширение для выполнения подстановки переменных.Это означает, что если вы хотите, чтобы контент содержал восклицательный знак, он должен быть каким-то образом закодирован.Есть два варианта.Одним из них является использование символьной нотации HTML!Это прекрасно работает для текстового содержимого, но не будет работать, если вы хотите комментарий HTML.Для комментариев я определяю! X!переменная, которая будет расширена до!
<div class="post">
<h2 class="title"><a href="#">!TITLE!</a></h2>
<p class="meta"><span class="date">!DATE!</span>
<span class="posted">Posted by <a href="#">!AUTHOR!</a></span></p>
<div style="clear: both;">
</div>
<div class="entry moreless">
Example with exclamation point!<br />
Another example with exclamation point!X!
</div>
<!X!--
sample comment
-->
</div>
Наконец, вот пакетный файл, который соберет все воедино и создаст выходной файл с именем FINAL.HTML.Я жестко закодировал значения для переменных, но их можно так же легко передать в качестве аргументов.
@echo off
setlocal enableDelayedExpansion
set X=^^^!
set TITLE=Sample HTML build
set DATE=%date%
set AUTHOR=Santa Clause
set TEMPLATE="template.html"
set CONTENT="content_html.txt"
set FINAL="final.html"
<%TEMPLATE% (
for /f %%A in ('type %TEMPLATE%^|find /c /v ""') do (
for /l %%N in (1 1 %%A) do (
set "ln="
set/p "ln="
echo(!ln!
set "test=!ln:*<=<!"
if "!test!"=="<div id="content">" (
for /f "usebackq delims=" %%L in (%CONTENT%) do echo(%%L
)
)
)
)>%FINAL%
У этого решения есть некоторые ограничения
- Пустые строки (строкине содержит ничего, кроме пробелов) будет удален из части контента.Вероятно, не проблема с HTML.Устранение этого ограничения усложнит и замедлит решение.
- Строки, начинающиеся с;будет удален из части контента.Это ограничение легко снимается, но код выглядит ужасно.Он включает указание в качестве символа EOL в последнем цикле FOR / F.
- Файл шаблона должен использовать стандарт новой строки Windows .Файлы стиля Unix, использующие , не будут работать с этим решением.Это также может быть решено, но опять-таки это усложнит и замедлит ход событий.
- Как я уже говорил ранее, триггер содержимого в шаблоне может иметь начальные пробелы, но в строке не должно быть никаких завершающих символов.Снятие этого ограничения замедлит процесс.
- Строки ограничены 1024 символами в шаблоне
- Конечные управляющие символы удаляются из каждой строки в шаблоне