使用变量搜索文件名,并用多行替换另一个文件中的不同变量文本

时间:2013-02-21 11:27:59

标签: batch-file batch-processing

我以前回答过我的问题,但现在我意识到我需要更多的帮助。我的代码几乎可以完成我想要的所有内容:

@echo off

copy 2.txt 2.txt-backup

setlocal enableDelayedExpansion

>2.txt (
  for /f "delims=" %%A in (2.txt-backup) do (
 set "ln=%%A"
if "!ln:~0,6!" == "Class=" findstr /c:"ClassName=!ln:~6!" 1.txt >null && set       "ln=Class=ShipDummy"
echo !ln!
 )
)

请参考: Batch - I would like to search with a variable in one file and replace that variable result in another file

但是现在我已经意识到我需要1.txt作为一个文件名,其名称中包含一个变量,一系列文件,没有确切的限制,如:

Log_0.txt

Log_1.txt

Log_2.txt

Log_3.txt

依旧......

可能只有Log_0.txt,或者可能有Log_0.txt通过Log_23.txt,甚至更多......

另外,我想在Class = ShipDummy的替换文本中添加另一行: 类ShipDummy 类型= 206

这将替换Type = 206的Class = ShipDummy替换文本下面的一行文本。\

1 个答案:

答案 0 :(得分:1)

这样做你想要的吗?

@echo off

copy 2.txt 2.txt-backup

setlocal enableDelayedExpansion

>2.txt (
    for /f "tokens=1* delims=:" %%A in ('findstr /n "^" 2.txt-backup') do (
        ( echo !ln!| findstr "^Type=206$" >NUL && set ln=ln ) || (
            set "ln=%%B"
            if "!ln:~0,6!"=="Class=" (
                findstr /c:"ClassName=!ln:~6!" Log_*.txt >null && (
                    echo Class=ShipDummy
                    set "ln=Type=206"
                )
            )
            if #!ln!==# (echo;) else echo !ln!
        )
    )
)