Batch file 编辑文本文件以添加"-&引用;8个字符

Batch file 编辑文本文件以添加"-&引用;8个字符,batch-file,text,Batch File,Text,我每天都要处理一个大的文本文件,我需要在每行添加一个“-”字符,例如: ABCDEF DC01 B738 ABCDEF B787 将成为 ABCDEF -DC01 B738 ABCDEF - B787 这对于批处理文件来说有多容易 问候 大卫 注意:这将删除空行,并存在感叹号问题。(可能是问题,也可能不是问题;取决于您的文件内容) 它还将消除以开头的行由于默认的下线字符。 此外,行的最大长度限制为8190字节(感谢dbenham)这是一个“健壮”的纯批处理解决方案,它保留了

我每天都要处理一个大的文本文件,我需要在每行添加一个“-”字符,例如:

ABCDEF DC01 B738
ABCDEF      B787
将成为

ABCDEF -DC01 B738
ABCDEF -     B787
这对于批处理文件来说有多容易

问候 大卫

注意:这将删除空行,并存在感叹号问题。(可能是问题,也可能不是问题;取决于您的文件内容)
它还将消除以
开头的行由于默认的下线字符。
此外,行的最大长度限制为8190字节(感谢dbenham)

这是一个“健壮”的纯批处理解决方案,它保留了
和空行。但它的最大行长度仍然限制在8190左右,而且对于大文件来说速度非常慢。这不会修改少于7个字符的行

@echo off
setlocal disableDelayedExpansion
set "file=file.txt"

>"%file%.new" (
  for /f "delims=" %%A in ('findstr /n "^"` "file.txt"') do (
    set "s=%%A"
    setlocal enableDelayedExpansion
    set "s=!s:*:=!"
    if not defined s (
      echo(
    ) else if "!s:~7!" equ "" (
      echo(!s!
    else (
      echo(!s:~0,7!-!s:~7!
    )
    endlocal
  )
)
move /y "%file%.new" "%file%" >nul
这是一个真正健壮、快速的解决方案,它使用的是纯脚本(批处理/JScript),从XP开始在任何Windows机器上本机运行-不需要第三方可执行文件。此解决方案也不会修改少于7个字符的行

@echo off
setlocal disableDelayedExpansion
set "file=file.txt"

>"%file%.new" (
  for /f "delims=" %%A in ('findstr /n "^"` "file.txt"') do (
    set "s=%%A"
    setlocal enableDelayedExpansion
    set "s=!s:*:=!"
    if not defined s (
      echo(
    ) else if "!s:~7!" equ "" (
      echo(!s!
    else (
      echo(!s:~0,7!-!s:~7!
    )
    endlocal
  )
)
move /y "%file%.new" "%file%" >nul
从命令行:

jrepl "^.{7}" "$&-" /f file.txt /o -
从批处理脚本中

call jrepl "^.{7}" "$&-" /f file.txt /o -

这是一个简单的两行批处理JScript混合脚本解决方案,它具有JScript语言的所有优点:快速、健壮、管理所有特殊字符和保留空行。此外,它非常简单,可以被理解,然后在阅读本手册后针对其他类似任务进行修改。将其复制到扩展名为.BAT的文件中

@set @a=0 // & cscript //nologo //E:JScript "%~F0" < input.txt > output.txt & goto :EOF

WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/^.{7}/gm,"$&-"));
@set@a=0//&cscript//nologo//E:JScript“%~F0”output.txt&goto:EOF
Write(WScript.Stdin.ReadAll().replace(/^.{7}/gm,“$&-”);

然后阅读您的问题,并分享您遇到的问题。回答您的问题:使用批处理文件很容易做到这一点<代码>;)@Stephan:你如何证明你对这个问题的编辑是正确的?您似乎添加了原始问题中没有的其他场景。@abelenky:请参阅-检查“并排降价”我看到您的降价了。您添加了一个在David的原始问题中不存在的新场景。为什么?为什么只重定向到
output.txt
,而不是附加每个
echo!排队
output.txt
?因为它是-特别是对于大文件(如问题状态)。我还担心它会消耗大量内存,将所有输出集合到mem中。嗯,它在写入之前不会收集内存中的所有数据。相反,它打开文件,写入要写入的内容(不关闭文件),直到没有更多数据为止。然后关闭文件。(您可以通过在写入文件时键入文件进行检查(您可能希望在循环中添加一个
超时-t1
,以获得足够的时间来执行此操作))另一个限制-这将消除以
开头的行由于默认的下线字符。此外,行的最大长度限制为8190字节。。