确定这里 文件txt.txt
添加多行txtfile
line1
line2
add after this line
line4
etc
etc
和其他文件的中间addthis.txt
其中包含多行
我想以后在前页所有这些行添加add after this line
我想知道的是我必须在this中完成所有更改?
任何帮助,非常感谢。
确定这里 文件txt.txt
添加多行txtfile
line1
line2
add after this line
line4
etc
etc
和其他文件的中间addthis.txt
其中包含多行
我想以后在前页所有这些行添加add after this line
我想知道的是我必须在this中完成所有更改?
任何帮助,非常感谢。
@ECHO OFF
SETLOCAL
SET /p info="enter info : "
:: read addafter line
(
FOR /f "delims=" %%i IN (poison1.txt) DO (
SET addafter=%%i
FOR /f "delims=" %%n IN (' findstr /n "^" txtfile.txt') DO (
SET line=%%n
SETLOCAL ENABLEDELAYEDEXPANSION
SET line=!line:*:=!
ECHO(!line!
IF "!line!"=="!addafter!" TYPE your_multiline_addition.txt
ENDLOCAL
)
)
)>newfile.txt
FC newfile.txt txtfile.txt
GOTO :eof
只需要TYPE your_multiline_addition.txt
而非ECHO(%input%
(你也许可以扔掉你的输入,太)
OR
你可以
TYPE "%info%"
,如果你想要输入包含该文件的文件的名称额外
测试数据和结果:
======== poison1.txt ===========
"A line !of! ] many < & >var*ied %poison^char;ac(ters) | like "," a\nd+so=on"
======== extra_lines.txt ===========
extra line one
extra line two
extra line three
======== txtfile.txt ===========
line one
line two
line three
A line !of! ] many < & >var*ied %poison^char;ac(ters) | like "," a\nd+so=on
line 5 was blank - this is line FIVE
"A line !of! ] many < & >var*ied %poison^char;ac(ters) | like "," a\nd+so=on"
line 8 was blank - this is line NINE
======== newfile.txt ===========
line one
line two
line three
A line !of! ] many < & >var*ied %poison^char;ac(ters) | like "," a\nd+so=on
line 5 was blank - this is line FIVE
"A line !of! ] many < & >var*ied %poison^char;ac(ters) | like "," a\nd+so=on"
extra line one
extra line two
extra line three
line 8 was blank - this is line NINE
好的,但是我在同一个批处理文件中有一个'setlocal enabledelayedexpansion'方法,我怎么禁用它来让'SET line = %% n'工作?我在'SET line = %% n'之前尝试过'setlocal disabledelayedexpansion',但它说最大的setlocal递归级别达到了 – 2013-04-10 14:54:14
我不知道你的意思。 'SETLOCAL ENABLEDELAYEDEXPANSION'('SET'不会工作)早于整个程序吗? 'SET line = %% n'在任何情况下都不应该受到影响 - 而你的问题是如何插入多行而不是最初指定的行。 – Magoo 2013-04-10 15:00:31
对于每个'SETLOCAL',你需要一个匹配的'ENDLOCAL',如上面的例程所示 - 'SETLOCAL ENABLEDELAYEDEXPANSION'与'ENDLOCAL'后面的4行相匹配。当达到ENDLOCAL时,执行'SETLOCAL'时环境恢复到它的状态。可以通过执行'ENDLOCAL&set var =%var%'来将'var'设置为'SETLOCAL..ENDLOCAL'括号内的'var'的最终值来更改原始环境。但是 - 到达文件结束与到达ENDLOCAL相同并终止当前最内层的SETLOCAL。 – Magoo 2013-04-10 15:51:24
的(http://stackoverflow.com/questions/15997228/add-line-after- [在CMD线之后添加线]可能重复a-line-in-cmd) – rekire 2013-04-14 08:46:29