批处理文件:在文件中查找字符串并在后面添加文本



我通常使用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命令。检查后取下REMtest.html.new看起来正常。

最新更新