编辑文本文件以在

时间:2017-01-16 14:09:04

标签: batch-file text

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

ABCDEF DC01 B738
ABCDEF      B787

会变成

ABCDEF -DC01 B738
ABCDEF -     B787

这对批处理文件有多容易?

问候 大卫

3 个答案:

答案 0 :(得分:1)

@echo off
setlocal enabledelayedexpansion

(for /f "delims=" %%a in (input.txt) do (
  set line=%%a
  set line=!line:~0,7!-!line:~7!
  echo !line!
))>output.txt

注意:这会删除空行并且感叹号出现问题。 (可能是也可能不是问题;取决于您的文件内容)
它还将消除由于默认EOL字符而以;开头的行 此外,行数限制为~8190字节最大长度(感谢d​​benham)

答案 1 :(得分:0)

这是一个强大的"保留!和空行的纯批处理解决方案。但它仍然限制在~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

这是一个真正强大而快速的解决方案,使用JREPL.BAT - a regular text processing utility纯脚本(批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 无需第三方可执行文件。此解决方案也不会修改少于7个字符的行。

从命令行:

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

在批处理脚本中

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

答案 2 :(得分:0)

这是一个简单的两行Batch-JScript 混合脚本解决方案,具有JScript语言的所有优点:快速,健壮,管理所有特殊字符并保留空行。此外,在阅读documentation之后,它很容易理解,然后针对其他类似任务进行修改。将其复制到扩展名为.BAT的文件。

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

WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/^.{7}/gm,"$&-"));