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

问题描述 投票:0回答:2

我通常使用

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
batch-file
2个回答
1
投票

您的

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


0
投票
我尝试了这段代码,它有效,但空行被删除了。

`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%
    
© www.soinside.com 2019 - 2024. All rights reserved.