#0025/9999 Q&A集
★タイトル (88VAUSER) 95/11/01 00:00 (172)
1.23 バッチファイルの作り方はMS−DOSと同じですか?
★内容
MS−DOSとPC−Engineとではいくつか異なる点があるので、それを
解説します。
以下の説明では、MS−DOSを「DOS」、PC−Engineを「PCE」
と略します。また、「DOS...」はMS−DOSの場合の説明、
「PCE...」はPC−Engineの場合の説明を表します。
■1.環境変数の参照方法
------------------------------------------------------------------------
DOS... %<環境変数>%
PCE... %<環境変数><区切り文字>
<区切り文字>は、半角スペース TAB % - = / ) . , $ " ! が使えます。
------------------------------------------------------------------------
例えば、環境変数COMSPECを参照する場合、
------------------------------------------------------------------------
DOS... %COMSPEC%
PCE... %COMSPEC
%COMSPEC,
%COMSPEC% など
------------------------------------------------------------------------
とします。
DOSでは %<環境変数>% がその設定値に置き換えられると%記号が取り除かれ
ます。PCEでは環境変数の前の%記号は取り除かれますが区切り文字は取り除か
れません。例えば、
------------------------------------------------------------------------
ECHO パスは%PATH%です。
------------------------------------------------------------------------
を実行した場合、その結果は、
------------------------------------------------------------------------
DOS... パスはC:\BIN;C:\VZ;C:\MST;です。
PCE... パスはC:\BIN;C:\VZ;C:\MST;%です。
------------------------------------------------------------------------
となります。(PCEでは%が1個残っている。)
PCEのこの仕様はかなり不都合です。例えば、環境変数TMPにディレクトリ
名を設定してあるとします。DOSならば、
------------------------------------------------------------------------
COPY A:*.TXT %TMP%\TEST.DAT
------------------------------------------------------------------------
のようにファイル名の一部に環境変数を使用できますが、PCEでは区切り記号が
取り除かれない上、「¥」は区切り記号として使えないので、このようなことがで
きないのです。
■2.パラメータ変数
DOSでは、%0に起動したバッチのファイル名から「.BAT」を除いたもの
が入りますが、PCEではそのようにはならず、%0はただの文字として扱われま
す。%1〜%9はDOSもPCEも同様に使えます。
例えば、TEST.BATというファイル名で次のようなバッチファイルを作っ
たとします。
------------------------------------------------------------------------
ECHO %0
------------------------------------------------------------------------
これを実行すると次の様になります。
------------------------------------------------------------------------
DOS... TEST
PCE... %0
------------------------------------------------------------------------
■3.ECHOコマンドでのエスケープシーケンスの使用
ECHOコマンドでエスケープシーケンスを含む文字列を表示するのは、DOS
では可能ですがPCEではできません。
■4.ECHOコマンドでの改行
ECHOコマンドを使って1行改行する方法は、
(1)ECHO:
(2)ECHO.
(3)ECHO [全角空白]
などがありますが、DOSとPCEで使用できるものが異なります。
------------------------------------------------------------------------
(1) (2) (3)
DOS... 可 可 不可
PCE... 不可 可 可
------------------------------------------------------------------------
■5.IFコマンドにおける文字列の比較
------------------------------------------------------------------------
IF <文字列1> == <文字列2> <コマンド>
------------------------------------------------------------------------
において、PCEでは , ) = / ; が文字列1、2に含まれているとエラーになりま
す。DOSでは , = ; < > | が含まれているとエラーになります。
■6.FORコマンド
例えば、
------------------------------------------------------------------------
FOR %%<C> IN (*.*) DO COPY %%<C> D:
^^ ^^
1 2
------------------------------------------------------------------------
において、次のような違いがあります。
------------------------------------------------------------------------
1の部分の%の個数 2の部分の%の個数 変数名<C>
DOS... 2個 2個 1文字、大文字・小文字を区別
PCE... 0〜2個 1〜2個 何文字でも、大文字・小文字区別せず
------------------------------------------------------------------------
例えば、PCEでは
------------------------------------------------------------------------
FOR HENSU IN (*.*) DO COPY %hensu D:
------------------------------------------------------------------------
のようにもできますが、DOSでは
------------------------------------------------------------------------
FOR %%H IN (*.*) DO COPY %%H D:
------------------------------------------------------------------------
としなければなりません。
■7.空行に関するバグ
PCEでは、バッチファイルの途中に改行だけの行があると、エラーになったり、
その行の先にあるラベルが認識されなくなったりすることがあります。
どうしても空行を入れたいときは、行の先頭に : だけを書いた行を書くとこの
症状は防げます。例えば、次の様にします。
------------------------------------------------------------------------
IF EXIST D:WORK.TMP GOTO EX
:
: WORK.TMP が無かったとき
:
ECHO WORK.TMPはありません。
GOTO END
:
: WORK.TMP があったとき
:
:EX
ECHO WORK.TMPがあります。
:END
------------------------------------------------------------------------
この例の様に、: はREMの代わりにも使えます。
■8.バッチファイル中からのバッチファイルの実行
DOSでは、バッチファイルからバッチファイルを実行するときに、
------------------------------------------------------------------------
COMMAND /C SAMPLE
------------------------------------------------------------------------
のようにやりますが、PCEで
------------------------------------------------------------------------
PCENGINE /C SAMPLE
------------------------------------------------------------------------
とやってもうまくいきません。ただし、PCE V1.1ではフリーウエアの
「PCEPAT.SYS」をデバイスドライバとして組み込むことで、これが可能
になります。
<<< end of article >>>