はじめに
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 |
---|---|---|---|
○ | △ | ○ | ○ |
ECHO [ON | OFF]
ECHO ON
に設定すると、バッチファイル実行中にそのバッチファイル中のコマンドの実行状態をスクリーンに表示 (エコーバック) します。
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 |
---|---|---|---|
○ | × | △ | ○ |
IF [NOT] ERRORLEVEL <数値> コマンド
IF [NOT] <文字列1>==<文字列2> コマンド
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 |
---|---|---|---|
× | × | × | ○ |
IFF [NOT] EXIST <ファイル名> [THEN] [<コマンド>]
.
.
ENDIFF [<コマンド>]
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 ハンドブック』は国立国会図書館デジタルコレクションで読む事ができます。書籍の閲覧には国立国会図書館の利用者登録 (本登録) が必要です。