使用批处理脚本查找和替换

时间:2014-01-14 10:27:14

标签: batch-file

我很难为以下任务编写批处理脚本。 说我有以下文本文件。

A.TXT

hello world-0
hi ABC

hello world-1
hi ABC

hello world-2
hi ABC

B.txt

CAT
MAT
RAT

我的 output.txt 文件应包含

hello world-0
hi CAT

hello world-1
hi MAT

hello world-2
hi RAT

如何使用Batch脚本实现此目的? 谢谢!

2 个答案:

答案 0 :(得分:0)

尝试使用此

@echo off
setlocal enableextensions enabledelayedexpansion

rem Read a.txt with findstr /n to avoid blank line removal
rem Read b.txt with set /p only when a replacement is needed

< "b.txt" (
    for /f "tokens=1,* delims=:" %%f in ('findstr /n "^" ^<"a.txt"') do (
        set "line=%%g"
        if defined line if not "!line: ABC=!"=="!line!" (
            set /p "repl="
            for /f %%r in ("!repl!") do set "line=!line: ABC= %%r!"
        )
        echo(!line!
    )
)

endlocal

这应该可以胜任。

答案 1 :(得分:0)

使用好的文件解析工具,例如awk。你可以下载awk here

C:\>awk "FNR==NR{a[++c]=$1;next}{ for(i=1;i<=NF;i++){ if($i==\"ABC\") { $i=a[++d] } }  }1" B.txt A.txt
hello world-0
hi CAT

hello world-1
hi MAT

hello world-2
hi RAT