String 如何使用.bat查找并替换txt中的特定字符串?

String 如何使用.bat查找并替换txt中的特定字符串?,string,batch-file,replace,String,Batch File,Replace,我有一个xml: <?xml version="1.0"?> <arquivoposicao_4_01 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <fundo xmlns="http://tempuri.org/"> <header> 我使用:file.bat“xmlns=”

我有一个xml:

    <?xml version="1.0"?>
<arquivoposicao_4_01 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<fundo xmlns="http://tempuri.org/">
<header>
我使用:file.bat“xmlns=”“dog=“nome.txt 但它取代了“=dog=”的“xlmns=”


PS:我只想替换第三行,第二行不行。

替换这样一个包含“=”的字符串在windows批处理中是非常有问题的,因为没有办法转义或引用它(据我所知)

请参见此处了解一些想法:

另外,在批处理脚本中使用search/replace和regex解析/修改XML通常是一个坏主意,可能会产生大量问题。最好用提供XML解析库(如java、perl等)的语言编写程序。

@ECHO Off
REM——准备命令处理器--
setLocalEnableExtensions
SETLOCAL DISABLEDELAYEDEXPANSION
如果“%~1”==“findstr”^::“%~f0”&转到:EOF,则REM
::使用固定字符串替换参数以进行测试
设置“p1=xmlns”
设置“p2=狗”
设置“p3=q24511441.txt”
对于/f“tokens=1,*delims=]”中的%%A(“”类型%p3%|find/n/v”“”)do(
设置“行=%%B”
如果定义行(
回音(“%B”|查找“%p1%”
如果错误级别为1(回声(%%B),则为其他(
调用集“行=%%行:%p1%%=%p2%%”
对于/f“tokens=1*delims==”%%X in('set line')执行回显(%%Y
)
)其他回声(
)
后藤:EOF
这里有一种方法可以做一些类似于你看起来想要的事情

问题似乎是替换文本语法使用
=
将目标字符串与替换字符串分开

您的例程似乎旨在成为一个通用例程,用另一个例程替换一个字符串。批处理不太适合此任务,但可以在一定范围内完成

我已将您的参数
%1..%3
替换为用于测试的固定文本。该例程将用于将
%1=
替换为
%2=
,这并不完美。它将在不包含
xmlns=
的行上单独保留
xmlns
并在包含
xmlns=/code>的行上替换任何
xmlns
h
dog


我使用了一个名为
q24511441.txt
的文件,其中包含您的测试数据。

这几乎完美,但我不希望出现一行,例如:“我不希望在文件中出现第一行,只有第二行。如果您能帮上忙的话!
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"


  if defined line (
    call set "line=echo.%%line:%~1=%~2%%"
    for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)