用于替换括号的批处理脚本

时间:2015-07-22 08:18:27

标签: batch-file window

我有一个包含超过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
C0/000E:    E220        SEP #$20       ; Set 8-bit accumulator
C0/0010:    C210        REP #$10       ; Set 16-bit X and Y

具体来说,这意味着:

  • 如果该行不以“C0 /”开头,则不执行任何操作。
  • 如果第34个字符不是左括号,那么该行可能只包含数据,所以什么都不做。
  • 如果是左括号,请用分号和空格替换
  • 然后,找到并删除右括号。如果在同一条线上没有找到它,它应该放弃,但这不是必要的。

请注意,此主板会将标签替换为多个空格,因此左括号似乎不是第34个字符。

理想情况下,我想要一个批处理脚本,它允许我拖放文档(例如,abc.txt),并自动获取不同的文件(例如,abc2.txt)。但这不是强制性的。

编辑:必须强调的是,代码本身可以包含括号,因此不能选择简单的查找和替换。例如:

C0/0000:    7C0600      JMP ($0006,X)  (Display window X)

1 个答案:

答案 0 :(得分:1)

第一部分是关于提取丢弃到你的蝙蝠的文件,生成输出名称并篡改目标文件。

在代码的第二部分中,我们逐个检查您的标准,并且只有当它们都适合当前行时才执行替换。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET source=%1

FOR /F "tokens=1 delims=." %%t IN ("%source%") DO SET target=%%t
SET target=!target!2.txt
TYPE NUL>!target!

FOR /F "tokens=1* delims=]" %%j in ('type "%source%" ^| find /V /N ""') DO (
    IF "%%k"=="" (
        ECHO.>>!target!
    ) ELSE (
        SET currentLine=%%k
        IF "!currentLine:~0,2!"=="C0" (
            IF "!currentLine:~34,1!"=="(" (
                SET left=!currentLine:~0,33!
                SET right=!currentLine:~34!
                ECHO !right!
                SET right=!right:(=; !
                SET right=!right:^)=!
                ECHO !right!
                SET currentLine=!left!!right!
            )
        )
        ECHO !currentline!>>!target!
    )
)

正如您所提到的,解释制表符和空格可能存在问题。在我的情况下(我已经从你的帖子中复制了你的输入文件)我不得不使用这个:

...
IF "!currentLine:~39,1!"=="(" (
    SET left=!currentLine:~0,38!
    SET right=!currentLine:~39!
...
相关问题