首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取并使用系统输出(批处理)

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

Stack Overflow用户
提问于 2013-04-18 09:52:15
回答 1查看 58关注 0票数 0

我想写一个批处理文件,允许使用A86汇编程序更快地汇编多个汇编文件,并查看结果。有两种情况,当存在程序集错误时和没有错误时。

汇编器输入示例:

代码语言:javascript
复制
A86 FILE1.ASM FILE2.ASM FILE3.ASM FILE4.ASM

情况1:错误。假设FILE3.ASM中存在错误,系统将在第4行输出:

代码语言:javascript
复制
Error messages inserted into FILE3.ASM

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

代码语言:javascript
复制
Object: FILE1.BIN

在第一种情况下,我想使用命令notepad++ FILENAME.ASM打开使用Notepad++生成错误的文件。

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

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

EN

回答 1

Stack Overflow用户

发布于 2013-04-18 20:24:15

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

代码语言:javascript
复制
@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发送的,所以我使用2^>^&1将stderr重定向到for循环中的stdout。我不知道是否需要它,但如果不需要,应该不会有任何伤害。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16073231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档