Этот пример использования программы nhreplace показывает, как запрограммировать в командном файле автоматическую сборку html файлов из общих фрагментов (например, если у всех страниц одинаковый заголовок, подвал или другие фрагменты) и демонстрирует использование следующих возможностей:
- выполнение операций поиска/замены по списку команд – режим -list
- выполнение замены содержимым текстового файла – опция -f
- проверка результата выполнения по коду возврата
Этот же подход можно применить для любых других текстовых файлов, если требуется формировать их автоматически из других файлов.
Потребуется вынести одинаковые фрагменты страниц в отдельные текстовые файлы, например, header.htmf:
<h1>Общий для всех страниц заголовок</h1>
или footer.htmf:
<hr> <p>Общий для всех страниц подвал, например, с контактной информацией.</p>
Затем в html файлы вместо копирования фрагментов можно вставить строки, которые позднее будут заменены на содержимое соответствующих файлов, например, строку <!-- doc-type.htmf -->
для подстановки файла doc-type.htmf. Если добавить ещё подстанавливаемые файлы для заголовка (header.htmf), подвала (footer.htmf) и т.д., то index.html будет выглядеть примерно так:
<!-- doc-type.htmf --> <html> <head> <!-- head-meta.htf --> <title>Страница index</title> </head> <body> <!-- header.htmf --> Содержимое страницы index... <br> Страница index <!-- page1-link.htmf --> <!-- page2-link.htmf --> <!-- footer.htmf --> </body> </html>
Теперь автоматическую подстановку файлов можно выполнить в командном файле:
set out_fldr=Content if not exist %out_fldr%\ md %out_fldr% if exist *.html copy /y *.html %out_fldr%\ if exist htmflist.txt del htmflist.txt for %%a in (*.htmf) do echo /s:"<!--[ ]*%%a[ ]*-->" /f:%%a >> htmflist.txt set pass_no=1 :PassLoopBegin echo Проход %pass_no%... nhrplc -list:htmflist.txt -notitle -o:d %out_fldr%\*.htm if errorlevel 1 goto :End set /a pass_no+=1 goto :PassLoopBegin :End if exist htmflist.txt del htmflist.txt
Собранные файлы будут сохранены в каталог Content, поэтому CMD файл первым делом создаёт его и копирует html файлы.
Следующим шагом цикл for по всем htmf файлам формирует список замен в файле htmflist.txt, в котором каждая строка задаёт замену текста файлом:
/s:"<!--[ ]*doc-type.htmf[ ]*-->" /f:doc-type.htmf /s:"<!--[ ]*footer.htmf[ ]*-->" /f:footer.htmf /s:"<!--[ ]*head-meta.htmf[ ]*-->" /f:head-meta.htmf … ну и так далее
И, наконец, выполняется сборка файла программой nhreplace:
nhrplc -list:htmflist.txt -notitle -o:d %out_fldr%\*.html
Программа обрабатывает все html файлы, выполняя замены из файла htmflist.txt и «собирая» тем самым выходные html файлы.
Несколько проходов используется для того, чтобы сделать подстановки, заданные в самих htmf файлах. Как только результат выполнения nhrplc будет 1 (то есть текст не найден), произойдёт выход из цикла. Также выход из цикла произойдёт при ошибке (код возврата 2).
Если необходимо изменить, например, подвал на всех страницах, достаточно будет внести изменение в файл footer.htmf и заново «собрать» html файлы.
Пример htmf/html/cmd файлов: linkhtml (-list)