批处理:将.txt文件中的行插入.txt文件

时间:2012-05-07 15:53:20

标签: batch-file

我对批处理文件完全陌生,并且一直在修改简单的命令。我已经想出如何将文本移动到另一个文件,找到一行等,但我希望能够在已有的文本文件中添加几行文本。以下是我到目前为止的情况:

@ECHO OFF
CD C:\Documents and Settings\SLZ1FH\Desktop\New Folder
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
  ECHO %%A
  IF %%A=="Ex3 3"(
    TYPE Line_to_add.txt >> Examples.txt
  )
)

如果Examples.txt包含:

  • Ex1 1
  • Ex2 2
  • Ex3 3
  • Ex4 4
  • Ex5 5

和Line_to_add.txt包含:

  • 这是一行
  • 这只是踢球的另一条线!

我希望输出为:

  • Ex1 1
  • Ex2 2
  • Ex3 3
  • 这是一行
  • 这只是踢球的另一条线!
  • Ex4 4
  • Ex5 5

tia:)

解决方案

@ECHO OFF
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
  ECHO %%A
  IF "%%A" EQU "Ex3" (
    TYPE Line_to_add.txt
  )
) >> temp.txt
move /y temp.txt Examples.txt

3 个答案:

答案 0 :(得分:6)

您从不打扰提问,但我可以看到您的代码存在一些问题。

1)您的IF语句被破坏,因为左侧的paren被视为要比较的字符串的一部分。你的父母必须至少有一个空格。

2)您的比较永远不会找到匹配,因为引号包含在比较中。您的值有空格,因此比较的两边都应用引号括起来。

3)您正在尝试插入现有文件,但无法正常工作。您的代码只会将文本附加到文件的末尾。您必须将整个所需结果写入新的临时文件,然后将临时文件移动到原始名称。

首先,我将忽略文件的更新,并显示如何将正确的输出输出到屏幕。

@ECHO OFF
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
  ECHO %%A
  IF "%%A" EQU "Ex3 3" (
    TYPE Line_to_add.txt
  )
)

然后将输出定向到文件并将文件移动到所需名称是很简单的。

@ECHO OFF
(
  FOR /F "tokens=*" %%A IN (Examples.txt) DO (
    ECHO %%A
    IF "%%A" EQU "Ex3 3" (
      TYPE Line_to_add.txt
    )
  )
) >temp.txt
move /y temp.txt Examples.txt

学习批处理语法和技术的良好资源:

1)每个命令都有在线帮助。只需在命令名后添加/?选项即可。例如,DIR /?

2)以下是一些信息良好的网站

http://www.dostips.com/
http://judago.webs.com/
http://www.robvanderwoude.com/batchfiles.php

答案 1 :(得分:0)

使用 FOR / F 迭代文件中的行,使用 SET / a 创建计数器。

对于文件中的每一行, CALL 一个子程序,它增加计数器并对其进行测试。如果它有一些值,请按照目前的步骤插入新数据。

这是您的脚本,已更新。您可以使用计数器或文件的内容来触发插入。它还处理输入和输出文件具有相同名称的情况。

@ECHO OFF
set INFILE=Examples.txt
set OUTFILE=Output.txt
set MIXFILE=Line_to_add.txt

set OUTFILEOLD=%OUTFILE%
if NOT "%INFILE%"=="%OUTFILE%" got no_tmp1
set OUTFILE=%OUTFILE%.tmp
:no_tmp1

set counter=0
FOR /F "tokens=*" %%A IN (%INFILE%) do call :process_line %%A

set OUTFILE=%OUTFILEOLD%
if NOT "%INFILE%"=="%OUTFILE%" goto no_tmp2
copy %OUTFILETMP% %OUTFILE%    
:no_tmp2

goto exit

:process_line
set /a counter=counter+1
echo Line %counter% = %*
REM ##IF "%counter%"=="3" goto :adding_line 
IF /i "%1"=="Ex3" goto :adding_line
echo %* >> %OUTFILE%
goto :EOF

:adding_line
echo Adding line
type %MIXFILE% >> %OUTFILE%
goto :EOF

:exit
echo DONE

答案 2 :(得分:0)

1) create new temp file
2) output to temp
3) delete original
4) rename temp to original

想不出更好的事情。