我通常使用
echo
方法将“文本”写入 HTML
文件:
echo. >> "C:\Users\Me\Desktop\test.html"
echo ^<div^>TestDIV^</div^> >> "C:\Users\Me\Desktop\test.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:\Users\Me\Desktop\test.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
find`命令(“保存在引号内”)
您重定向到您的输入文件。重定向是解析器的第一件事,因此即使在
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
。
`enter code here`@echo off
`enter code here`setlocal
`enter code here`set "DIVInput=^<div^>TestDIV^</div^>"
`enter code here`set inputfile=test.html
`enter code here`(for /f usebackq^ delims^=^ eol^= %%a in ("%inputfile%") do (
`enter code here`echo %%a
`enter code here`echo "%%~a" |find "DIV 1</div>" >nul && echo %DIVInput%
`enter code here`))>"%inputfile%.new"
`enter code here`REM move /y "%inputfile%.new" "%inputfile%