FreeDOS 上の BAT ファイルを使用してタスクを自動化する
これは、FreeDOS でのバッチ ファイルに関する役立つガイドです。
これまでに DOS を使用したことがない場合でも、単に COMMAND.COM という名前のコマンドライン シェルについてはご存知でしょう。 COMMAND.COM シェルは DOS の同義語になっているため、FreeDOS も「FreeCOM」と呼ばれる同様のシェルを実装していることは驚くことではありませんが、名前は COMMAND.COM と同じです。他の DOS システム。
ただし、FreeCOM シェルは、コマンドを実行するコマンドライン プロンプトを提供するだけではありません。 FreeDOS でタスクを自動化する必要がある場合は、バッチ ファイル を使用して実行できます。これらのスクリプトは .BAT 拡張子を使用するため、「BAT ファイル」とも呼ばれます。
バッチ ファイルは、Linux で作成するスクリプトよりもはるかに単純です。なぜなら、この機能がずっと前に最初に DOS に追加されたとき、それは DOS ユーザーが特定のコマンドを「バッチ化」する方法として意図されていたからです。条件分岐には柔軟性があまりなく、バッチ ファイルは算術拡張、標準出力とエラー メッセージの個別のリダイレクト、バックグラウンド プロセス、テスト、ループ、および Linux スクリプトで一般的なその他のスクリプト構造などのより高度な機能をサポートしていません。
これは、FreeDOS でのバッチ ファイルに関する役立つガイドです。 %PATH% のように、変数名をパーセント記号 (%) で囲んで環境変数を参照してください。ただし、FOR ループでは、歴史的な理由から若干異なる構造が使用されることに注意してください。
印刷出力
バッチ ファイルでは、何が起こっているかをユーザーに知らせるためにメッセージを出力する必要がある場合があります。メッセージを出力するには、ECHO ステートメントを使用します。たとえば、バッチ ファイルは、次のステートメントを使用してタスクが完了したことを示す場合があります。
ECHO Done
ECHO ステートメントには引用符は必要ありません。 FreeCOM ECHO ステートメントは引用符を特別な方法で処理せず、通常のテキストと同様に出力します。
通常、FreeDOS はバッチ ファイルを実行すると、バッチ ファイル内のすべての行を出力します。これは通常、ユーザー用にいくつかの環境変数を定義するだけの非常に短いバッチ ファイルでは問題になりません。ただし、より多くの作業を実行する長いバッチ ファイルの場合、このバッチ ラインの継続的な表示が煩わしい場合があります。この出力を抑制するには、次のように ECHO ステートメントに OFF キーワードを使用します。
ECHO OFFFreeDOS の実行中にバッチ ラインの表示を再開するには、代わりに ON キーワードを使用します。
ECHO ONほとんどのバッチ ファイルには、メッセージを抑制するために最初の行に ECHO OFF ステートメントが含まれています。ただし、シェルはそのステートメントを実行するときに、ECHO OFF を画面に出力します。このメッセージを隠すために、バッチ ファイルでは先頭にアットマーク (@) が使用されることがよくあります。バッチ ファイル内の行の先頭にあるこの特殊文字は、ECHO がオンになっている場合でも、その行の印刷を抑制します。
@ECHO OFFコメント
長いバッチ ファイルを作成する場合、ほとんどのプログラマーはコメントを使用して、バッチ ファイルの目的を思い出させることを好みます。バッチ ファイルにコメントを入力するには、REM (コメント) キーワードを使用します。 REM 以降は FreeCOM シェルによって無視されます。
@ECHO OFF
REM This is a comment「セカンダリ」バッチファイルの実行
通常、FreeCOM は一度に 1 つのバッチ ファイルのみを実行します。ただし、複数のバッチ ファイルに共通する環境変数の設定など、特定の作業を行うには、別のバッチ ファイルを使用する必要がある場合があります。
「実行中の」バッチ ファイルから 2 番目のバッチ ファイルを単に呼び出すと、FreeCOM はその 2 番目のバッチ ファイルに完全に切り替わり、最初のバッチ ファイルの処理を停止します。代わりに、最初のバッチ ファイルの「内部」で 2 番目のバッチ ファイルを実行するには、CALL キーワードを使用して 2 番目のバッチ ファイルを呼び出すように FreeCOM シェルに指示する必要があります。
@ECHO OFF
CALL SETENV.BAT条件付き評価
バッチ ファイルは、IF ステートメントを使用した単純な条件付き評価構造をサポートしています。これには 3 つの基本的な形式があります。
- 前のコマンドの戻りステータスをテストする
- 変数が値と等しいかどうかをテストする
- ファイルが存在するかどうかのテスト
IF ステートメントの一般的な使用法は、プログラムがオペレーティング システムに正常に返されたかどうかをテストすることです。ほとんどのプログラムは、正常に完了した場合はゼロ値を返し、エラーが発生した場合は他の値を返します。 DOS では、これはエラー レベル と呼ばれ、IF テストの特殊なケースです。
MYPROG というプログラムが正常に終了したかどうかをテストするには、プログラムが「ゼロ」エラー レベルを返したかどうかを実際に調べます。 ERRORLEVEL キーワードを使用して、次のような特定の値をテストします。
@ECHO OFF
MYPROG
IF ERRORLEVEL 0 ECHO Success
ERRORLEVEL を使用してエラー レベルをテストするのは、プログラムの終了ステータスを調べるには不格好な方法です。 DOS プログラムで考えられるさまざまなリターン コードを調べるより便利な方法は、FreeDOS が定義する ERRORLEVEL と呼ばれる特別な変数を使用することです。最後に実行したプログラムのエラーレベルを保存します。その後、== テストを使用して、さまざまな値をテストできます。
IF ステートメントを使用した == テストを使用して、変数が値と等しいかどうかをテストできます。一部のプログラミング言語と同様、= を使用して 2 つの値を直接比較します。通常、一方の側で環境変数を参照し、もう一方の側で値を参照しますが、2 つの変数の値を比較して、それらが同じかどうかを確認することもできます。たとえば、上記の ERRORLEVEL コードを次のバッチ ファイルで書き換えることができます。
@ECHO OFF
MYPROG
IF %ERRORLEVEL%==0 ECHO SuccessIF ステートメントのもう 1 つの一般的な用途は、ファイルが存在するかどうかをテストし、存在する場合はアクションを実行することです。 EXIST キーワードを使用してファイルをテストできます。たとえば、TEMP.DAT という一時ファイルを削除するには、バッチ ファイルで次の行を使用します。
@ECHO OFF
IF EXIST TEMP.DAT DEL TEMP.DATIF ステートメントのいずれかで、NOT キーワードを使用してテストを否定できます。ファイルが存在しない場合にメッセージを出力するには、次のように記述できます。
@ECHO OFF
IF NOT EXIST TEMP.DAT ECHO No file分岐実行
IF テストを活用する 1 つの方法は、前のテストの結果に応じて、バッチ ファイルのまったく異なる部分にジャンプすることです。最も単純なケースでは、キー コマンドが失敗した場合にバッチ ファイルの最後までスキップすることができます。または、特定の環境変数が正しく設定されていない場合は、他のステートメントを実行することもできます。
GOTO 命令を使用すると、バッチ ファイルの別の部分にスキップできます。これにより、バッチ ファイル内のラベルと呼ばれる特定の行にジャンプします。これは厳密な「go-to」ジャンプであることに注意してください。バッチ ファイルの実行は新しいラベルで開始されます。
プログラムが一時データを保存するために既存の空のファイルを必要としたとします。ファイルが存在しない場合は、プログラムを実行する前にファイルを作成する必要があります。これらの行をバッチ ファイルに追加すると、プログラムが常に作業する一時ファイルを保持できるようになります。
@ECHO OFF
IF EXIST temp.dat GOTO prog
ECHO Creating temp file...
TOUCH temp.dat
:prog
ECHO Running the program...
MYPROG
もちろん、これは非常に単純な例です。この 1 つのケースでは、バッチ ファイルを書き換えて IF ステートメントの一部として一時ファイルを作成することもできます。
@ECHO OFF
IF NOT EXIST temp.dat TOUCH temp.dat
ECHO Running the program...
MYPROG
反復
一連のファイルに対して同じタスクを実行する必要がある場合はどうすればよいでしょうか? FOR ループを使用して、一連のファイルを反復できます。これは、毎回異なるファイルを使用して 1 つのコマンドを実行する 1 行のループです。
FOR ループは、反復変数に特別な構文を使用します。この構文は、他の DOS 環境変数とは異なる方法で使用されます。一連のテキスト ファイルをループして各ファイルを順番に編集するには、バッチ ファイルで次のステートメントを使用します。
@ECHO OFF
FOR %%F IN (*.TXT) DO EDIT %%F
バッチ ファイルを使用せずにコマンド ラインでこのループを実行する場合、反復変数は 1 つのパーセント記号 (%) だけで指定されることに注意してください。
C:\> FOR %F IN (*.TXT) DO EDIT %Fコマンドライン処理
FreeDOS は、バッチ ファイルの実行時にユーザーが指定したコマンド ライン オプションを評価する簡単な方法を提供します。 FreeDOS はコマンド ラインを解析し、最初の 9 つのバッチ ファイル オプションを特殊変数 %1、%2、... などに %9 まで格納します。 。この方法では、11 番目のオプション (およびそれ以降) に直接アクセスできないことに注意してください。 (特殊変数 %0 にはバッチ ファイルの名前が保存されます。)
バッチ ファイルで 9 つを超えるオプションを処理する必要がある場合は、SHIFT ステートメントを使用して最初のオプションを削除し、すべてのオプションを 1 つの値ずつシフトしてください。したがって、2 番目のオプションは %1 になり、10 番目のオプションは %9 になります。
ほとんどのバッチ ファイルでは、値を 1 つずらす必要があります。ただし、他の増分でシフトする必要がある場合は、次のようにそのパラメータを SHIFT ステートメントに指定できます。
SHIFT 21 ずつシフトする例を示す簡単なバッチ ファイルを次に示します。
@ECHO OFF
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
ECHO Shift by one ..
SHIFT 1
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
10 個の引数を指定してこのバッチ ファイルを実行すると、SHIFT ステートメントがどのようにコマンド ライン オプションを並べ替えるかがわかり、バッチ ファイルは 10 番目の引数に %9 としてアクセスできるようになります。
C:\SRC>args 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
Shift by one ..
2 3 4 5 6 7 8 9 10
C:\SRC>