我通常使用echo
方法将"文本"写入HTML
文件,方法是使用:
echo. >> "C:UsersMeDesktoptest.html"
echo ^<div^>TestDIV^</div^> >> "C:UsersMeDesktoptest.html"
我经历过,echo
总是将额外的行写入目标文件的末尾。
但是,如果我的目标文件(test.html(已经具有如下结构,该怎么办:
<div id="wrapperDIV">
<div id="DIVcontent1">DIV 1</div>
<div id="DIVcontent2">DIV 2</div>
</div>
我想在这个现有结构中编写其他行,例如紧接着:
<div id="DIVcontent1">DIV 1</div>
我试图为此设置一个脚本,但到目前为止我无法让它运行。(似乎在for
循环中失败(
set DIVInput=^<div^>TestDIV^</div^>
set inputfile=C:UsersMeDesktoptest.html
(for /f usebackq^ delims^=^ eol^= %%a in ("%inputfile%") do (
if "%%~a"=="DIV 1^</div^>" call echo %DIVInput%
echo %%a
))>>"%inputfile%"
pause
您的set DIVInput=...
会消耗转义插入符号,这在本例中很糟糕,因为稍后需要它来正确echo
变量。首选语法set "var=value"
保留它们(它们在引用中是安全的(。
对于if
行,您只想检查子字符串,而不是整行(if
总是比较完整的字符串并且不支持通配符(。我用echo fullstring|find "string"
来检查这一点。请注意,我使用引号(echo "%%~a"') for the same reason as above: proper handling of poison chars like
>and
<Same reason for not escaping with the
查找"命令("保存引号内"(>
重定向到输入文件。重定向是解析器的第一件事,因此甚至在for
有机会读取文件之前文件就会被覆盖。使用其他文件并在完成后覆盖原始文件。
你想在某个触发行之后插入一个字符串,但你的代码在该行之前插入(嗯,这很容易修复(。
@echo off
setlocal
set "DIVInput=^<div^>TestDIV^</div^>"
set inputfile=test.html
(for /f usebackq^ delims^=^ eol^= %%a in ("%inputfile%") do (
echo %%a
echo "%%~a" |find "DIV 1</div>" >nul && echo %DIVInput%
))>"%inputfile%.new"
REM move /y "%inputfile%.new" "%inputfile%
注意:出于安全原因,我禁用了move
命令。检查后取下REM
test.html.new
看起来正常。