如何用批处理bat替换文本指定位置内容?

假设以下为1.txt的内容,要将第6行第4个字符(含)开始后面全部的内容(字符数目不确定,会变动),替换为2.txt的内容(字符数目不确定,会变动),如何用批处理实现?
1234567890
9876543210
abcdefg
gfedcba
784512
aaa565456123178979

第1个回答  2015-07-23
@echo off & setlocal enabledelayedexpansion
cd .>#
for /f "tokens=1* delims=" %%a in ('findstr/n .* 1.txt') do (
if %%a equ 6 (
set "line=%%a"
echo !line:~0,3! >>#
goto :next
)
else echo.%%a >>#
)
:next
type 2.txt >>#
move # 1.txt

追问

经测试,这段代码可以替换到1.txt,但是原本1.txt所有的内容都没了,有没有只替换第6行的第4个字符(含)后面的字符的方法?

追答@echo off & setlocal enabledelayedexpansion
cd .>#
for /f "tokens=1* delims=:" %%a in ('findstr/n .* 1.txt') do (
if %%a equ 6 (
set "line=%%b"
echo !line:~0,3! >>#
goto :next
) else echo.%%b >>#
)
:next
type 2.txt >>#
move # 1.txt

追问

按照上面的代码又重新测试了,结果是1.txt的内容保留了,只有第6行第4字符后面的字符删除了,而2.txt的内容添加到了1.txt的第7行里面了,有没有办法直接在第6行第4字符后面直接替换?

追答@echo off & setlocal enabledelayedexpansion
cd .>#
for /f "tokens=1* delims=:" %%a in ('findstr/n .* 1.txt') do (
if %%a equ 6 (
set "line=%%b"
set /p  "s=!line:~0,3!" < nul >>#
goto :next
) else echo.%%b >>#
)
:next
type 2.txt >>#
move # 1.txt

本回答被提问者和网友采纳
相似回答