批处理文件 - 替换文本文件中的第5行

时间:2014-11-26 15:11:26

标签: batch-file dos

我已经花了一些时间在线寻找答案,但我一直无法工作。

我有一个大约1700行的文本文件。在这些行中的任何一行都没关系,但我总是想用相同的字符串替换第5行。

例如,文本文件名为test.txt。这些界限如下:

  1. a
  2. B'/ LI>
  3. C
  4. d
  5. FMOD'随机的东西'
  6. ˚F
  7. 我总是希望用set字符串替换第5行(总是以FMOD开头但后面有随机的东西)。这必须要完成很多次,并且现在是手动完成的,如果可以通过批处理文件来完成,无论如何都可以使用,而其他人可能想要使用它,所以我真的很有帮助,所以我希望这样做所有本地都在批处理文件中,而不使用其他文件。

    事先得到很多赞赏,

    马特

1 个答案:

答案 0 :(得分:1)

使用纯原生批次:

@echo off
setlocal disableDelayedExpansion

set "file=yourFile.txt"
set "newLine5=NewLine5Here"

>"%file%.new" (
  for /f "delims=" %%A in ('findstr /n "^" "%file%"') do for /f "delims=:" %%N in ("%%A") do (
    set "ln=%%A"
    setlocal enabableDelayedExpansion
    if "!ln:~0,6!" equ "5:FMOD" (echo(!newLine5!) else echo(!ln:*:=!
    endlocal
  )
)
move /y "%file%.new" "%file%" >nul

以上限制为每行约8191个字节。 1700线的速度可能并不差,但速度相对较慢。

如果你使用我的JREPL.BAT utility生活非常简单 - 一个混合的JScript /批处理脚本可以对文件内容进行正则表达式查找/替换,包括合并用户提供的JScript代码来定制结果的选项。它是纯脚本,可​​以在任何Windows机器上从XP开始本地运行。

此JREPL解决方案 比任何纯批处理解决方案更快,更强大:

jrepl "^FMOD.*" "NewLine5Here" /jbegln "skip=(ln!=5)" /f "yourFile.txt" /o -