0

A86 アセンブラを使用して複数のアセンブリ ファイルをすばやくアセンブルできるバッチ ファイルを作成し、結果を表示したいと考えています。組み立てミスがある場合とない場合の2通りのケースがあります。

アセンブラー入力の例:

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.

システム出力からエラー/成功ファイル名を抽出するにはどうすればよいですか?

4

1 に答える 1

0

申し訳ありませんが、私は に詳しくありませんが、1A86つまたは 2 つのアイデアがあります。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"==""

のエラー出力が stderr または stdout のどちらを介して送信されるかについては言及されていないため、ループ内でA86stderr を stdout にリダイレクトしました。必要かどうかはわかりませんが、必要がなくても問題はありません。for2^>^&1

于 2013-04-18T12:24:14.620 に答える