如何删除文本文件中的某些字符和文本?

时间:2019-10-01 23:38:25

标签: batch-file

我有一个文本文件,如下所示:

 <Line Text="***********TITLE************" /> 
 <Line Text="***REPORT****" /> 
 <Line Text=TEXT" /> 
 <Line Text=" " /> 
 <Line Text="TEXT" /> 
 <Line Text="TEXT" /> 
 <Line Text=" " /> 
 <Line Text="TEXT" /> 
 <Line Text="TEXT" /> 
 <Line Text=" " />

我要创建一个批处理文件以删除“ <Line Text="”和“ " />”,从而使文件看起来像这样:

 ***********TITLE************
 ***REPORT****
 TEXT

 TEXT
 TEXT

 TEXT
 TEXT

我尝试了以下方法:

@echo off 
setlocal enableextensions disabledelayedexpansion

set "search=^<Line Text"
set "replace="

set "textFile=test.txt"

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    >>"%textFile%" echo(!line:%search%=%replace%!
    endlocal
)

导致删除文件中的所有文本。我确实尝试删除了“小于”和“大于”的标志。但是,有些方法仍然无法获得理想的结果。

2 个答案:

答案 0 :(得分:1)

您的代码中有两个问题:

  1. 您需要在搜索中escape <>并替换^>^>之类的字符串,因为当变量{{1 }}和%search%展开。
  2. 在搜索字符串中不能出现%replace%符号,因为它会分隔搜索字符串和替换字符串。

因此,我将使用for /F来分割行,例如:

=

答案 1 :(得分:0)

这里有几个例子可以帮助您。

此示例仅适用于所提供的文本文件格式和内容:

@Echo Off
Set "InputFile=infile.txt"
Set "OutputFile=outfile.txt"
If Exist "%InputFile%" ((For /F UseBackQTokens^=2Delims^=^=^" %%A In (
            "%InputFile%")Do Set /P "=%%A"<NUL&Echo()>"%OutputFile%")

如果您在3行上有错字,而您确实错过了开头的双引号,那么:

@Echo Off
Set "InputFile=infile.txt"
Set "OutputFile=outfile.txt"
If Exist "%InputFile%" ((For /F UseBackQTokens^=2Delims^=^" %%A In (
            "%InputFile%")Do Set /P "=%%A"<NUL&Echo()>"%OutputFile%")

无论哪种情况,您都只需要根据需要修改23行上的文件名/路径。