2015-12-11 37 views
1

我是批处理文件的新手,无法将此处的最后一个步骤拼合在一起。我的目标纯粹是在两行文本之间插入'Test4'。文本永远不会改变,始终是第1行和第3行(第2行在文本文件中为空白)。该代码删除第2行(空白),但不插入文本。使用批处理文件添加文本行

当前txt文件:

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE ProductDataeXchangePackage [ 
1 
2 
3 

当前批处理脚本:你能做到这一点

rem Saved in D:\Temp\WriteText.bat 
echo off 
setlocal enabledelayedexpansion 
ren test.txt in.tmp 
set p= 
for /f "delims=" %%a in (in.tmp) do (
    if "%%a"=="<!DOCTYPE_ProductDataeXchangePackage+[" if "!p!"=="<?xml version="1.0" encoding="UTF-8" ?>" Echo Test4 >> test.txt 
    Echo %%a >>test.txt 
    set p=%%a 
) 
del in.tmp 

回答

0

的一种方式。

rem Saved in D:\Temp\WriteText.bat 
@echo off 
setlocal enabledelayedexpansion 
ren test.txt in.tmp 
set /p line1=<in.tmp 
>test.txt echo %line1% 
>>test.txt Echo Test4 
for /f "skip=1 delims=" %%a in (in.tmp) do >>test.txt Echo %%a 
del in.tmp 
+0

它删除我原来的text.txt文件。不知道删除前是否有效。 – user3158712

+0

@ user3158712,您的代码中没有名为text.txt的文件,也没有在我的代码中。但是,如果你指的是test.txt,那么当然。您正在将test.txt重命名为in.tmp。 – Squashman

+0

对不起,我感到困惑。我的意思是test.txt;但是,我不想将test.txt重命名为in.tmp,相反,只需在第1行(<?xml version =“1.0”encoding =“)之间插入'test4' UTF-8“?>)和第3行(<!DOCTYPE ProductDataeXchangePackage [))。老实说,我不知道我是将test.txt重命名为in.tmp – user3158712

2
@echo off 
setlocal EnableDelayedExpansion 

ren test.txt in.tmp 
< in.tmp (

    set /P "line1=" 
    echo !line1! 

    set /P "line2=" 
    echo Test4 

    rem Copy the rest of lines 
    findstr "^" 

) > test.txt 
REM del in.tmp 

编辑输出例如添加

C:\> type test.txt 
<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE ProductDataeXchangePackage [ 
1 
2 
3 

C:\> test.bat 

C:\> type test.txt 
<?xml version="1.0" encoding="UTF-8" ?> 
Test4 
<!DOCTYPE ProductDataeXchangePackage [ 
1 
2 
3 
+0

这很酷。不知道你能做到这一点! – Squashman

+0

它添加了新行,但没有复制其余行。 – user3158712

+0

@Squashman:请参阅[本文](http://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman/28278628#28278628) – Aacini