2013-04-10 64 views
0

确定这里 文件txt.txt添加多行txtfile

line1 
line2 
add after this line 
line4 
etc 
etc 

和其他文件的中间addthis.txt 其中包含多行

我想以后在前页所有这些行添加add after this line

我想知道的是我必须在this中完成所有更改?

任何帮助,非常感谢。

+0

的(http://stackoverflow.com/questions/15997228/add-line-after- [在CMD线之后添加线]可能重复a-line-in-cmd) – rekire 2013-04-14 08:46:29

回答

1
@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 
+0

好的,但是我在同一个批处理文件中有一个'setlocal enabledelayedexpansion'方法,我怎么禁用它来让'SET line = %% n'工作?我在'SET line = %% n'之前尝试过'setlocal disabledelayedexpansion',但它说最大的setlocal递归级别达到了 – 2013-04-10 14:54:14

+0

我不知道你的意思。 'SETLOCAL ENABLEDELAYEDEXPANSION'('SET'不会工作)早于整个程序吗? 'SET line = %% n'在任何情况下都不应该受到影响 - 而你的问题是如何插入多行而不是最初指定的行。 – Magoo 2013-04-10 15:00:31

+0

对于每个'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