如何使用批处理脚本替换文件中的两行文本

3

我需要在文本文件中替换两行字符串。我编写了一个脚本来替换一个字符串:

@echo off
setlocal enabledelayedexpansion

rem file name
Set infile=file.txt

rem what to find
Set find=123

rem value to replace
Set replace=321

@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%
pause

如何修改它以一次替换两行?我的意思是将“查找”改为“替换”,将“查找2”改为“替换2”?

2
在你的 set TMPR=... 之后,添加 set TMPR=!TMPR:%find2%=%replace2%! - Stephan
@Stephan 它只替换了第二行而没有替换第一行。 - SimonD
怎么样?你现有的代码替换了第一行,对吧?把我的那一行加进去,就替换第二行。 - Stephan
好的,有一个误解。您的代码确实会在两个字符串相等时替换它们。但是我想要另外一种方式:我有字符串'abc'和'def',我希望它们分别被替换为'123'和'456'。 - SimonD
2个回答

1
在你的set TMPR=...之后,加上set TMPR=!TMPR:%find2%=%replace2%!
@echo off
setlocal enabledelayedexpansion
del tmp.txt
rem file name
Set infile=file.txt

rem what to find
Set find=abc
set find2=def

rem value to replace
Set replace=123
set replace2=456

for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
set TMPR=!TMPR:%find2%=%replace2%!
Echo !TMPR!>>tmp.txt
)
type tmp.txt

file.txt:

aaa
abc
bbb
def
ccc
xxxabcyyy
uuudefvvv
nnnabcdefmmm

输出:

aaa
123
bbb
456
ccc
xxx123yyy
uuu456vvv
nnn123456mmm

-1

有没有其他方法可以将2个值传递到一个函数中,该函数搜索属性字符串并替换值? 例如:

代码:

CALL :modify prop.first.name , myName
CALL :modify prop.last.name , myLastName
:modify

set "source=srcFile.txt"
set "target=tmpFile.txt"

set property=%~1
set value=%~2

setlocal enableDelayedExpansion
(
for /F "tokens=1* delims==" %%a in ('findstr /B "^" %source%') do (
  set line=%%b
  if defined line echo !line:%property%=%property%=%value%!
)
) > %target%
 endlocal

源文件看起来像:

prop.first.name=firstname

prop.last.name=lastname

prop.pssw.word=password

prop.url.link=alink

需要将等号后面的值替换为输入值

思路是调用一个通用函数4次,每次使用不同的参数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接