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 -