我想编写一个批处理文件,允许使用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
在十六进制编辑器中打开生成的对象。
如何从系统输出中提取错误/成功文件名?
答案 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。我不知道是否需要它,但如果没有,它不应该伤害任何东西。