好的。 我有两个文件 file1和file2
文件1
line1
helloa
hellob
line2
file2
line3
helloc
hellod
helloe
line4
我想将file1中的所有hello
行替换为file2的行,这些行在一起,有什么想法吗?
可以使用此声明吗?
for /f "tokens=1,* delims==" %%a in ('find "hello" ^< file2') do set helloa=%%b
提前感谢您的回答
答案 0 :(得分: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的每一行。
- 如果该行没有开始'你好'那么只需回收它
- 如果该行开始'你好'然后是
*如果设置了标志,请清除它并从file2输出行。开头'你好'
*如果没有设置标志,则不执行任何操作(跳过file1的剩余部分。''hello'行
答案 1 :(得分: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
相关的行为。