0

好吧。我有两个文件 file1 和 file2

文件 1

line1
helloa
hellob
line2

文件2

line3
helloc
hellod
helloe
line4

我想hello用file2的行替换file1中的所有行,这些行是在一起的,有什么想法吗?

可以用这个语句来完成吗?

for /f "tokens=1,* delims==" %%a in ('find "hello" ^< file2') do set helloa=%%b

提前感谢您的回答

4

2 回答 2

0

尝试这个:

@echo off &setlocal
for /f "tokens=1*delims=:" %%i in ('^<file2.txt findstr /n "hello"') do set "#%%i=%%j"
(for /f "delims=" %%i in (file1.txt) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    if not "!line!"=="!line:hello=!" (
        endlocal
        if not defined flag (
            for /f "tokens=1*delims==" %%a in ('set "#"') do echo(%%b
            set "flag=true"
        )
    ) else ( 
        echo(!line!
        endlocal
    )
))>output.txt

输出在output.txt.

编辑:改进了有关delayed expansion.

于 2013-05-06T08:50:07.053 回答
0
@ECHO OFF
SETLOCAL
SET "inserted=N"
(
FOR /f %%i IN (file1.) DO (
 ECHO %%i|findstr /b /i "hello" >NUL
 IF ERRORLEVEL 1 (ECHO(%%i) ELSE (
  IF DEFINED inserted (
   SET "inserted="
   FINDSTR /b /i "hello" <file2.
  )
 )
)
)>output.txt
GOTO :EOF

该标志inserted设置为任何值。
读取 file1 的每一行。
- 如果该行不以“hello”开头,则仅 ECHO 它
- 如果该行以“hello”开头,则
* 如果设置了标志,则清除它并从 file2 输出行。以 'hello' 开头
* 如果未设置标志,则不执行任何操作(跳过 file1. 的 'hello' 行的其余部分

于 2013-05-06T08:41:14.573 回答