首页 > 解决方案 > 用批处理文件查找并替换多行文本?

问题描述

我有参数文件(文本文件),它们总是用不同的值填充。大约是。1500 行。在这行之间是一组 30 行,它们总是相同的,我想用批处理文件来操作。

举个例子。

这是当前文件。

1 different value
2 different value
3 different value
4 different value
5 fixed value
6 fixed value
7 fixed value
8 different value
9 different value

但我想交换它喜欢。

1 different value 
2 different value 
3 different value 
4 different value 
5 EXCHANGED value 
6 EXCHANGED value 
7 EXCHANGED value 
8 different value 
9 different value

也许还要添加更多文本,因为它并不总是在同一个位置。交换的文本始终相同,但行中的位置可以移动一点。

--

@echo off set "replace=something" set "replaced=different"
   
   set "source=Source.txt" set "target=Target.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!

我还发现我已经修改了一些代码,但这仅适用于单个单词。如果我尝试做更多,他只会忽略以前的那些。


我又做了一些工作。但它并没有真正做到我想要的。

源文件 ; 批处理中的文本应该在其中查找(确切) Traget_File 的文件;最后我想要的文件与交换的行。(最终) Search_For ;这是内部开始交换的一条线。Exchange_With ; 带有新行的文件。

不要为不正确的工作进度条而烦恼,我只是喜欢它:P

SET "Source_File=D:\SEARCH.para"
SET "Target_File=D:\A.para"
SET "Search_For=//______________DATA_______________"
SET "Exchange_With=D:\TARGET.para"

set i=10
(Set /P j=...Please wait) < NUL
ECHO.
(Set /P j=..............................) < NUL

:Start
call :DisplayProgressBar %i%
set /a i = i + 1
if /i %i% leq 100 goto start

ECHO.
ECHO.

IF NOT DEFINED Search_For (ECHO Failure: Variable Search_For not set!&GOTO :eof)

IF EXIST %Target_File% (DEL /f %Target_File% 1>NUL 2>NUL)

FOR /f "delims=" %%i IN ('FINDSTR . "%Source_File%"') DO (
SET Line=%%i& CALL :Exchange !Line!
)
GOTO :NEXT

:Exchange
SET Line=!Line:%Search_For%=%Exchange_With%!

IF [!Line!] EQU [] (ECHO.>>%Target_File%) ELSE (ECHO !Line!>>%Target_File%)
GOTO :eof

:NEXT
del "%Source_File%"
move /y "%Target_File%" "%Source_File%"

:DisplayProgressBar
(Set /P j=.) < NUL
title %1%% Completed
exit /b 

标签: windowsbatch-filecmd

解决方案


推荐阅读