2013-04-18 2 views
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++ FILENAME.ASM을 사용하여, 메모장 + +를 사용하여 오류를 생성 한 파일을 열고 싶습니다.

경우 2, 나는 HxD FILENAME.BIN 명령을 사용하여 16 진수 편집기에서 생성 된 개체를 열고 싶습니다.

시스템 출력에서 ​​오류/성공 파일 이름을 추출하려면 어떻게해야합니까?

답변

0

죄송합니다. A86에 익숙하지 않지만 아이디어가 2 개 있습니다. 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" 
) 

을 변경 if ERRORLEVEL 1-if "%%J"==""

당신 A86의 오류 출력이 stderr 또는 stdout을 통해 전송되는지 여부는 언급하지 않았으므로 stderr를 for 루프 의 stdout으로 리디렉션했습니다. 나는 그것이 필요한지 아닌지 전혀 모른다. 그러나 그렇지 않다면 어떤 것도 상처 입혀서는 안된다.