2013-05-06 132 views
0

好的。 我有兩個文件 文件1和文件2替換兩個文件的特定行

文件1

line1 
helloa 
hellob 
line2 

文件2

line3 
helloc 
hellod 
helloe 
line4 

我想與文件2,以取代所有文件1的hello線,該線是在一起的,任何想法?

它可以使用這種說法嗎?

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

在此先感謝您的回答

+0

「能不能用這個說法做了什麼?」 - 嗯,什麼,當你運行它發生 – 2013-05-06 07:56:48

回答

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改善行爲

+0

什麼呢#在'#%% I = %% j'辦? ?還是隻是爲了給它一個名字? – 2013-05-06 09:39:35

+0

'#%% i'是來自'file2'的具有「hallo」的變量的名稱。 – Endoro 2013-05-06 10:34:58

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輸出行。該開始「你好」
*如果未設置標誌,什麼也不做(這跳過文件1的其餘部分的「你好」線