Batch file 如何用替换字符串替换包含=

Batch file 如何用替换字符串替换包含=,batch-file,cmd,Batch File,Cmd,[已编辑的问题,试图让问题更清楚] 简单的一个,我想 我尝试使用以下批处理代码替换文本文件中的字符串 @echo off set "replace=#user=guest" set "replaced=user=StoreUser1" set "source=C:\Users\adam\Desktop\test.txt" set "target=C:\Users\adam\Desktop\test1.txt" setlocal enableDelayedExpansion ( for

[已编辑的问题,试图让问题更清楚]

简单的一个,我想

我尝试使用以下批处理代码替换文本文件中的字符串

@echo off
set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"
set "target=C:\Users\adam\Desktop\test1.txt"

setlocal enableDelayedExpansion
(
   for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
      set "line=%%b"
      if defined line set "line=!line:%replace%=%replaced%!"
      echo(!line!
   )
) > %target%
endlocal
它没有按预期执行,只是保持文本不变。但是,如果我将SET命令(当然还有文本文件中的文本)修改为:

然后这就如预期的那样起作用了。我假设第二个“=”是必需的,它导致集合无法正常工作,需要以某种方式进行转义

希望这是有意义的,并提前感谢


Adam

无法在find字符串中转义
=
。因此,如果find字符串包含
=
,则不可能执行变量扩展find/replace

这一点在第三次会议上进行了彻底调查。人们探索了各种策略来解决这个问题。但我认为你不想去兔子洞

这是通过批处理编辑文本文件通常不是一个好主意的众多原因之一

您可以尝试PowerShell,我相信如果您了解该脚本语言,这将相当容易

或者你可以用我的。它是纯脚本(混合JScrpt/批处理),从XP开始在任何Windows机器上本机运行-不需要第三方exe。脚本中嵌入了完整文档,可通过命令行通过
jrepl/?
,或
jrepl/??
获取分页帮助
/jrepl/?help
列出了各种形式的帮助。例如,
jrepl/?options
提供了每个选项的简要摘要

call jrepl "#user=guest" "user=StoreUser1" /f "C:\Users\adam\Desktop\test.txt" /o "C:\Users\adam\Desktop\test1.txt"

如果要覆盖原始文件,则

set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"

call jrepl replace replaced /v /f "%source%" /o -

看到这个Hi-lucumt,我已经浏览了这篇文章,但我很难看到我需要如何调整我的代码:(你在寻找什么结果?请编辑你的Q,以显示预期的变量名和预期的值,其目的显而易见。你的问题标题与你的实际问题无关。@Adam_231-dbenham做得很好。要制作出能轻松完成
sed
工作的东西,需要做很多工作。
set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"
set "target=C:\Users\adam\Desktop\test1.txt"

call jrepl replace replaced /v /f "%source%" /o "%target%"
set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"

call jrepl replace replaced /v /f "%source%" /o -