提取和使用系统输出(批处理)

时间:2013-04-18 01:52:15

标签: batch-file

我想编写一个批处理文件,允许使用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++ FILENAME.ASM打开使用Notepad ++生成错误的文件。

在第2种情况下,我想使用命令HxD FILENAME.BIN在十六进制编辑器中打开生成的对象。

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

1 个答案:

答案 0 :(得分: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"
)

如果A86返回的错误级别不是可靠指标,则将if ERRORLEVEL 1更改为if "%%J"==""

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