0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita100万記事感謝祭!記事投稿キャンペーン開催のお知らせ

MS-DOS ver2.0 と MSX-DOS のバッチコマンド

Last updated at Posted at 2025-01-17

はじめに

MSX-DOS / MSX-DOS2 / COMMAND 2.44 でバッチファイル内で使えるコマンドが判りづらかったので、MS-DOS ver2.0 と比較してみる事にしました。

MSX-DOS の COMMAND.COM および、MSX-DOS2 の COMMAND2.COM は MS-DOS の COMMAND.COM を MSX へ移植したものです (サブセット)。

バッチコマンド

MS-DOS 2.0 時点のバッチコマンドは 7 つあります。

ECHO, FOR, GOTO, IF, PAUSE, REM, SHIFT

ECHO

メッセージを表示したり、コマンドエコーの ON と OFF を切り替えます。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
書式1
ECHO [ON | OFF]

ECHO ON に設定すると、バッチファイル実行中にそのバッチファイル中のコマンドの実行状態をスクリーンに表示 (エコーバック) します。

書式2
ECHO <文字列>

書式2 は文字列をスクリーンに表示します。

次の例は、Hello,world. を表示します。

echo Hello,world.
  • MSX-DOS / MSX-DOS2 は 書式1 に対応していません
  • MSX-DOS の ECHO は外部コマンド ECHO.COM です。『MSX-DOS TOOLS』に含まれています
  • ECHO のみを実行すると、MS-DOS ではエコーバックの状態を表示しますが、MSX-DOS / MSX-DOS2 では空行を表示します

FOR

指定されたコマンドを集合の各値に対して実行します。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
× × ×
書式
FOR %%<変数> IN (<集合>) DO <コマンド> [コマンドパラメータ]

集合の値を一つずつ取り出して変数に格納します。変数はコマンドやコマンドパラメータで使う事ができます。

次の例は、*.BAK*.TMP にマッチするファイルを削除します。

for %%F in (BAK TMP) do del *.%%F
  • コマンドラインで使う場合には %%<変数> の部分は %<変数> になります

GOTO

ラベル行へジャンプします。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
× ×
書式
GOTO :<ラベル>

次の例は、world. だけを表示します。

goto :JP
echo Hello,
:JP
echo world.
  • ラベルの先頭には : (コロン) を指定し、ラベルだけを単独で 1 行に入力します
  • COMMAND 2.44 の場合: GOTO をバッチファイル内で使うには、拡張子を *.BTM に変更する必要があります
  • COMMAND 2.44 の場合: ラベルは : (コロン) ではなく ~ (チルダ) で始まります
  • COMMAND 2.44 の場合: *.BTM の実行にマッパー RAM の空きが 16KB 以上必要です
  • COMMAND 2.44 の場合: BTM 形式のバッチファイルでは、GOTO の他に GOSUB, RETURN, END が使えます。

IF

バッチプログラム中で条件分岐を行います。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
×
書式1
IF [NOT] ERRORLEVEL <数値> コマンド
書式2
IF [NOT] <文字列1>==<文字列2> コマンド
書式3
IF [NOT] EXIST <ファイル名> コマンド

次の例は、バッチファイルが fast パラメータ付きで実行された場合に M0CLKUP 200 を実行します。

if %1==fast M0CLKUP 200
  • MSX-DOS2 は COMMAND2.COM ver2.31 において IF に対応しています
  • 空文字列は "" です
  • COMMAND 2.44 は 書式1 に対応していません
  • COMMAND 2.44 は比較演算子として == の他に EQ (=), LT (<), GT (>) が使えます。NOT と組み合わせる事により、柔軟な比較演算を行えます

COMMAND 2.44 (恐らく MS-DOS2 も) は変数をダブルクォーテーションで括ると、MS-DOS とは異なり文字列とみなす (" + 展開された変数 + " とはならない) ので "%1"=="ABC" のような書き方はできません。

しかしながら %1==文字列 のような書き方だと、バッチファイルにパラメータが渡されなかった時に ==文字列 という式になってしまい、Invalid Parameter のエラーになってしまいます。

if fast==%1 M0CLKUP 200

この問題を回避するには、変数を右辺に置きます。COMMAND 2.44 だとダブルクォーテーションの代わりに中括弧が使えます。

if {%1}=={fast} M0CLKUP 200

(IFF)

COMMAND 2.44 では複数行 IF である IFF が使えます。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
× × ×
書式1
IFF [NOT] EXIST <ファイル名> [THEN] [<コマンド>]
    .
    .
ENDIFF [<コマンド>]
書式2
IFF [NOT] <文字列1> ==|EQ|LT|GT <文字列2> [AND|OR|XOR [NOT]
          <文字列3> ==|EQ|LT|GT <文字列4> [AND|OR|XOR ...]] [THEN]
  <コマンド>
    .
    .
ENDIFF [<コマンド>]

詳細は COMMAND 2.44 のドキュメントを確認してください。

PAUSE

バッチ処理を一時停止します。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
書式
PAUSE [<文字列>]
pause 
  • MSX-DOS では 文字列 を指定できません

REM

コメントを記述します。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
×

次の例は、バッチファイルにコメントを記述します。

書式
REM [文字列]
rem --------------------
rem  TEST
rem --------------------
  • MS-DOS では : がラベル行である事を利用して : TEST のようなコメント行が記述可能です
  • MS-DOS2 / COMMAND 2.44 では GOTO が使えないにもかかわらず : TEST のようなコメント行が記述可能です

SHIFT

バッチファイル中のパラメータの位置を変更します。

MS-DOS 2.0 MSX-DOS MSX-DOS2 COMMAND 2.44
× ×

SHIFT を実行すると、バッチファイルに渡されたパラメータの位置が一つ前へ (左へ) ずれます。

書式
SHIFT

次のバッチファイルを ABC DEF というパラメータ付きで実行すると、

echo %1
shift
echo %1

次のような結果になります。

結果
ABC
DEF

おわりに

MSX-DOS / MSX-DOS2 のマニュアルにバッチファイルの書き方って載ってましたっけ?

MS-DOS ver2.0 の詳しい情報は『標準 MS-DOS ハンドブック』に載っています。

『標準 MS-DOS ハンドブック』は国立国会図書館デジタルコレクションで読む事ができます。書籍の閲覧には国立国会図書館の利用者登録 (本登録) が必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?