Batch file 无法替换包含运算符的字符串

Batch file 无法替换包含运算符的字符串,batch-file,replace,operators,Batch File,Replace,Operators,我使用批处理查找表达式,并将其替换为改编自@MC ND的文件 @echo off setlocal enableextensions disabledelayedexpansion set "Var1=blabla=toto" set "Var2=replace" set "Var3=test.bat" for /f "delims=" %%i in ('type "%Var3%" ^& break ^> "%Var3%" ') do ( set "lin

我使用批处理查找表达式,并将其替换为改编自@MC ND的文件

@echo off 
setlocal enableextensions disabledelayedexpansion

set "Var1=blabla=toto"
set "Var2=replace"
set "Var3=test.bat"

   for /f "delims=" %%i in ('type "%Var3%" ^& break ^> "%Var3%" ') do (
       set "line=%%i"

       setlocal enabledelayedexpansion
       >>"%Var3%" echo(!line:%Var1%=%Var2%!
       endlocal
   )
但当我尝试一个包含诸如blabla=toto之类的运算符的表达式时,它就不起作用了

输入文件:

 blabla=toto
我得到的结果是:

 toto=replace=toto
我想要的结果是:

 replace

有人知道吗?

我建议您保护自己的理智,改用powershell.exe:

@回音 设置Var1=blabla=toto 设置Var2=替换 设置Var3=test.bat PowerShell-NoP GC“%Var3%”-替换“%Var1%”、“%Var2%”| SC“%Var3%”2>Nul 或者考虑到你之前的问题是接受三个变量作为参数:

@PowerShell-NoP GC“%$3”-替换“%$1”、“%$2”| SC“%$3”2>Nul
处理子字符串替换的cmd代码搜索第一个=以分离搜索和替换部分。因此,您不能在搜索部分中包含any=,因为它将被视为搜索结束/替换开始。可以是可选的-replace运算符是基于RegEx的,建议在var1中转义字符,否则解释为\|[]{}+.*?=>PowerShell-NoP GC“%Var3%”-Replace[RegEx]::转义“%Var1%”、“%Var2%”| SC“%Var3%”2>与提出的问题相关,它们的变量中没有RegEx特殊字符。如果提问者希望这样做,这超出了问题和答案的范围,但如果他们希望这样做,他们可以自由实施有用的修改。。