0

我想编写一个批处理文件,允许使用 A86 汇编器更快地组装多个汇编文件并查看结果。有两种情况,有组装错误和没有错误。

示例汇编器输入:

A86 FILE1.ASM FILE2.ASM FILE3.ASM FILE4.ASM

案例1:错误。假设 FILE3.ASM 有错误,系统会在第 4 行输出:

Error messages inserted into FILE3.ASM

情况2:没有错误。系统将在第 4 行输出:

Object: FILE1.BIN

在案例 1 中,我想使用 Notepad++ 打开生成错误的文件,使用命令notepad++ FILENAME.ASM.

在案例 2 中,我想使用命令在十六进制编辑器中打开生成的对象HxD FILENAME.BIN

如何从系统输出中提取错误/成功文件名?

4

1 回答 1

0

对不起,我不熟悉A86,但我有一两个想法。如果A86成功返回零,失败返回非零,那么我会这样做:

@echo off
setlocal enabledelayedexpansion

if defined PROGRAMFILES(X86) (set "pf=%PROGRAMFILES(X86)%") else set "pf=%PROGRAMFILES%"

:: path to notepad++
set "npp=%pf%\Notepad++\notepad++.exe"

:: path to hxd (fix this, please)
set "hxd=%pf%\HXD\hxd.exe"

set idx=1

for /f "tokens=1-5*" %%A in (
    'A86 FILE1.ASM FILE2.ASM FILE3.ASM FILE4.ASM 2^>^&1'
) do (
    if !idx! equ 4 (
        rem if %errorlevel% is non-zero (is 1 or higher)
        if ERRRORLEVEL 1 (
            start "" "%npp%" %%E
        ) else (
            start "" "%hxd%" %%B
        )
    )
    echo(%%A %%B %%C %%D %%E %%F
    set /a "idx+=1"
)

如果返回的 errorlevelA86不是一个可靠的指标,则更if ERRORLEVEL 1改为if "%%J"==""

你没有提到错误输出A86是通过 stderr 还是 stdout 发送的,所以我在for循环中将 stderr 重定向到 stdout 2^>^&1。我不知道是否需要它,但如果不需要它应该不会伤害任何东西。

于 2013-04-18T12:24:14.620 回答