0

大丈夫。私は2つのファイルfile1とfile2を持っています

ファイル1

line1
helloa
hellob
line2

ファイル2

line3
helloc
hellod
helloe
line4

file1のすべての行を file2 の行に置き換えたいのですがhello、行が一緒になっています。何かアイデアはありますか?

このステートメントを使用して実行できますか?

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

あなたの答えを前もって感謝します

4

2 に答える 2

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 に答える
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 に答える