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

Batch script to replace parentheses

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

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

为了编译目的,我需要按如下方式转换注释:

; Display menu window
C0/000E:    E220        SEP #       ; Set 8-bit accumulator
C0/0010:    C210        REP #       ; Set 16-bit X and Y

具体来说,这意味着:

请注意,此板将制表符替换为多个空格,因此左括号对您来说不会是第 34 个字符。

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

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

C0/0000:    7C0600      JMP ([=12=]06,X)  (Display window X)

第一部分是关于提取文件到您的 bat,生成输出名称并清除目标文件。

在代码的第二部分,我们将逐一检查您的条件,并仅在所有条件都符合当前行时才执行替换。

@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!
    )
)

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

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