我对批处理文件完全陌生,并且一直在修改简单的命令。我已经想出如何将文本移动到另一个文件,找到一行等,但我希望能够在已有的文本文件中添加几行文本。以下是我到目前为止的情况:
@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包含:
和Line_to_add.txt包含:
我希望输出为:
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
答案 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
想不出更好的事情。