我想写一个批处理文件,允许使用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在第一种情况下,我想使用命令notepad++ FILENAME.ASM打开使用Notepad++生成错误的文件。
在第二种情况下,我想使用HxD FILENAME.BIN命令在十六进制编辑器中打开生成的对象。
如何从系统输出中提取错误/成功文件名?
发布于 2013-04-18 20:24:15
对不起,我不熟悉A86,但我有一两个想法。如果A86在成功时返回0,在失败时返回非零,那么我会这样做:
@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。我不知道是否需要它,但如果不需要,应该不会有任何伤害。
https://stackoverflow.com/questions/16073231
复制相似问题