用于编辑.txt文件的批处理脚本

时间:2015-07-23 08:06:42

标签: windows batch-file

我有一个包含超过32,000行评论机器代码的.txt文档。它看起来像这样:

Display menu window
C0/000E:    E220        SEP #$20       (Set 8-bit accumulator)
C0/0010:    C210        REP #$10       (Set 16-bit X and Y)

我有一个脚本,可以按如下方式将其转换为编译目的:

; Display menu window
SEP #$20       (Set 8-bit accumulator)
REP #$10       (Set 16-bit X and Y)

问题是,我希望将每个功能的第一个地址保留为标签。所以它应该是这样的:

; Display menu window
C0000E: SEP #$20       (Set 8-bit accumulator)
        REP #$10       (Set 16-bit X and Y)

具体来说,这意味着我需要一个脚本:

  1. 当一行中的前3个字符不是C0 /
  2. 时停止
  3. 看下一行;如果以C0 /开头,则继续,否则返回步骤1.跳过该行。
  4. 在该行的开头打印一个分号。有关此内容的更多信息。
  5. 使它如此C0 / XXXX:变为C0XXXX:
  6. 删除接下来的9个字符。
  7. 打印两个空格。
  8. 我的其他脚本将负责其余部分。我需要脚本添加一个分号,因为我的实际脚本会在前面添加另一个分号,所以我可以使用find-and-replace来安全删除它们。

    请注意,此主板会自动将标签转换为多个空格,因此我提供的代码中的每一行与本地文件中的行长度不同。

1 个答案:

答案 0 :(得分:1)

不确定为什么使用批处理文件进行文本处理,但这里有一个脚本可以将问题中的第一个文本块转换为第三个文本块:

@echo off
setlocal enableDelayedExpansion

>output.txt (for /f "skip=2 delims=" %%a in ('find /n /v "" input.txt') do (
    for /f "delims=] tokens=1*" %%b in ("%%a") do (
        set line=%%c
        if "!line!"=="" (
            echo:
        ) else if not "!line:~0,3!"=="C0/" (
            echo ; !line!
            set inblock=
        ) else (
            for /f "tokens=1,2*" %%b in ("!line!") do (
                if "!inblock!"=="" (
                    set inblock=1
                    set label=%%b&set label=!label:/=!
                ) else (
                    set label=
                )
                echo !label!    %%d
            )
        )
    )
))
pause

NB。用!label之间的文字制表符替换空格!和{%{1}}中的%% d。