用批处理替换txt文件中的行

时间:2019-05-20 08:10:00

标签: batch-file text

我正在尝试修改一些.htm文件,将Name1 Lastname1, Name2 Lastname2替换为Name1 Lastname1

我找到了here,并根据自己的需要更改了代码:

REM @echo off
setlocal disableDelayedExpansion

:Variables
set "_strFind=Titel: Name1 Lastname1, Name2 Lastname2<br>"
set "_strInsert=Titel: Name1 Lastname1<br>"
set /p PC=PC?:
set /p Name=Name?:
set InputFile=\\%PC%\C$\Users\%username%\AppData\Roaming\Microsoft\Signatures\GR.htm
set OutputFile=\\%PC%\C$\Users\%username%\AppData\Roaming\Microsoft\Signatures\GR1.htm


:Replace
">"%OutputFile%" (
  for /f "usebackq delims=" %%A in ("%InputFile%") do (
    if "%%A" equ "%_strFind%" (echo %_strInsert%) else (echo %%A)
  )
)"

这什么也没做;我做错了什么?以及如何找到错误?

EDIT01:

<p class=MsoNormal><span style='font-size:8.0pt;font-family:"Arial",sans-serif'> John Doe GmbH<br> 
Blabla: John Doe, Johnny B.Good<br>
Bla bla bla<br>
Partner:<br>
Bla bla bla bla <o:p></o:p></span></p> 
</td>

我想删除, Johnny B.Good部分。

2 个答案:

答案 0 :(得分:0)

.htm(l)文件很可能是用UTF8编码的,所以我什至不尝试(纯)批处理。

检查编码并尝试此(未经测试的)批处理:

@Echo off
set "infile=GR.htm"
set "outfile=GR1.htm"
set "Replace=, Johnny B.Good"
set "Prefix=John Doe"
powershell -NoP -c "(Get-Content '%infile%' -raw -Enc UTF8) -replace '(?<=%Prefix%)%Replace%'|Set-Content '%outfile%' -Enc UTF8"

答案 1 :(得分:0)

这是一个答案,它使用(兼容来执行任务。

在此版本中,您不预先知道Name1Lastname1Name2Lastname2中的任何一个;仅Titel:<br>

@PowerShell -NoP "(GC 'input.htm' -Enc UTF8) -Replace '(Titel:[^,]*).+?(?=<br>)','$1'|SC 'output.htm' -Enc UTF8"

您只需更改input .htm文件的名称。如果您要修改多个htm文件,显然可以在它们上循环运行PowerShell命令,我将留给您自己编写代码。