Programming Field

Append - DOS/コマンドプロンプト コマンド一覧

[Windows 95 以降] このコマンドは削除されています。(Windows NT系には古いDOSコマンドの一部として含まれている場合があります。)

※ このコマンドは Windows またはそのセットアッププログラムと併用しないでください。

指定したディレクトリ内のファイルを現在のディレクトリに存在するかのように扱います。追加されたディレクトリは「アペンドディレクトリ」と呼びます。

構文

append [<path>[;<path2>...]] [/X[:ON | :OFF]] [/PATH:ON | /PATH:OFF]
append[.exe] /E [/X[:ON | :OFF]] [/PATH:ON | /PATH:OFF]

オプション一覧

<path>[;<path2>...]

アペンドディレクトリとして設定するディレクトリのパスを指定します。セミコロン「;」区切りで複数のパスを指定することができます。ディレクトリは相対パスやドライブ文字を省略したものを指定することもできますが、その場合は現在のディレクトリに基づいてパスが補完されるため、現在のディレクトリが変わる度に参照先が変わることとなります。

なお、既にアペンドディレクトリが設定されている場合は上書きされます。

また、セミコロン「;」1文字のみを指定すると、現在のアペンドディレクトリを削除する(アペンドディレクトリ無しにする)ことができます。

/X[:ON | :OFF]

アペンドディレクトリ内のファイルを実行可能にするかどうか指定します。「/X」または「/X:ON」と指定した場合はPathにディレクトリを指定したときと同様に、プログラムを実行する際のパス指定が省略されている場合の検索パスにアペンドディレクトリが使われるようになります。(「/X:OFF」で設定を解除します。)

<path> を指定せずに実行した場合は、アペンドディレクトリを変更せずに実行可能かどうかの設定を変更します。

既定では「/X:OFF」の状態となります。

※ Append組み込み済みである場合、アペンドディレクトリの設定を削除してもこのスイッチによる設定は保持されます。

/PATH:ON | /PATH:OFF

アペンドディレクトリを使ってファイルを検索する場合に、検索元のファイル名にパスが含まれていた場合に「パス名を解決したうえでそのパス上でファイルに対してアペンドディレクトリを適用するかどうか」を設定します。

既定では「/PATH:ON」の状態となります。

/E

Appendによるアペンドディレクトリの設定を環境変数「APPEND」に保持させるようにします。また、このとき既に環境変数「APPEND」に値が設定されている場合はそれをアペンドディレクトリとして設定します。

/E スイッチは最初のAppend実行時(常駐プログラムとして組み込みを行う時)にのみ指定することができます。また、「/E」を用いた場合 <path> の指定はできず無視されます。

Appendが既に実行されたことがある場合、オプションを指定せずにAppendを実行すると現在のアペンドディレクトリが出力されます。

※ Appendは一度実行されると常駐プログラムとして動作します。組み込み後は内部コマンドのようにAppendを実行する必要があり、「append.exe」と拡張子付きで実行すると「すでに組み込まれています」というエラーになります。

※ Appendは常駐プログラムであるため、Loadhighを用いて上位メモリに読み込むことが可能です。

解説

Appendプログラムを用いると、ファイルを利用する際のパス検索先として「アペンドディレクトリ」を対象にすることができます。Appendを使ってアペンドディレクトリを設定し、その状態(Appendが組み込まれた状態)でファイルの利用を行う、という流れになります。

アペンドディレクトリを用いたパスの検索

Appendが組み込み済みである(常駐されている)場合、MS-DOSのシステムコールの一部ファイル関連処理において、ファイル検索パスにアペンドディレクトリが使用されるようになります。

アペンドディレクトリが有効である場合、検索対象のファイル名は(現在のディレクトリに基づいたパス名解決後に)「解決されたパス → アペンドディレクトリの各パス」の順で検索され、最初に見つかったファイルが使用されます。

  • カレントディレクトリ「C:\APPS」、アペンドディレクトリ「D:\HOME;D:\BACKUP」、対象ファイル名「NOTE.TXT」、「/PATH:ON」の場合
    → 「C:\APPS\NOTE.TXT」「D:\HOME\NOTE.TXT」「D:\BACKUP\NOTE.TXT」の順に検索されます。
  • カレントディレクトリ「C:\APPS\TEST」、アペンドディレクトリ「D:\HOME;D:\BACKUP」、対象ファイル名「..\RESULT.LOG」、「/PATH:ON」の場合
    → 「C:\APPS\RESULT.LOG」「D:\HOME\RESULT.LOG」「D:\BACKUP\RESULT.LOG」の順に検索されます。
  • カレントディレクトリ「C:\APPS」、アペンドディレクトリ「D:\HOME;D:\BACKUP」、対象ファイル名「E:\ANOTHER.DAT」、「/PATH:ON」の場合
    → 「E:\ANOTHER.DAT」「D:\HOME\ANOTHER.DAT」「D:\BACKUP\ANOTHER.DAT」の順に検索されます。
  • カレントディレクトリ「C:\APPS」、アペンドディレクトリ「D:\HOME;D:\BACKUP」、対象ファイル名「E:\ANOTHER.DAT」、「/PATH:OFF」の場合
    → パス名が含まれるのでアペンドディレクトリは用いられず、「E:\ANOTHER.DAT」のみ検索されます。

※ 「現在のディレクトリに基づいたパス名解決」とは、対象のファイル名に相対パスまたは絶対パスでディレクトリ名が含まれる場合に、まずは「現在のディレクトリ」と「相対パス or 絶対パス」の組み合わせで絶対パスにする、という変換を示します。具体例は上記の検索例をご覧ください。

また「/X:ON」が設定されている場合は、プログラム実行時の検索パスにアペンドディレクトリが用いられるようになります。その順序は「解決されたパス → アペンドディレクトリの各パス → 環境変数PATHの各パス」となります。アペンドディレクトリがPATHよりも優先されることにご注意ください。

アペンドディレクトリとコマンド

いくつかのコマンドは常にアペンドディレクトリを利用しません。確認できているコマンドは以下の通りです。

これ以外にも、ファイルそのものを操作するコマンドではアペンドディレクトリが使用されない可能性があります。

また、Dirコマンドなどでディレクトリ内のファイルを列挙する際、アペンドディレクトリ内のファイルがそこに追加されることはありません。

アペンドディレクトリとファイル書き込み

アペンドディレクトリはファイルの読み込みや実行時(/X:ON のとき)に用いられますが、作成時には使用されません。そのため、エディター等でアペンドディレクトリからファイルを開き、編集してそれをそのまま保存しようとすると、現在のディレクトリ(厳密には解決されたパス)にそのファイルが保存される場合があります。これはエディター等の挙動に依存し、特に「ファイルを保存するためにいったん予備のファイルに書き込み、元のファイルを消してそれを移動する」ような処理を行っている場合はアペンドディレクトリではない場所に保存される挙動となります。書き込みを前提とした処理にアペンドディレクトリを用いる場合、予備のファイルを作成しないようなプログラムに対してのみ使用するのが良いと考えられます。

アペンドディレクトリを用いるMS-DOSシステムコール(INT 21H割り込み)

詳細として、Appendが組み込み済みの場合以下のMS-DOSシステムコールがアペンドディレクトリを用いるようになります。

  • 0FH - 既存ファイルのオープン
  • 23H - ファイルサイズの取得
  • 3DH - ハンドルを用いた既存ファイルのオープン

「16H ファイルの作成(またはサイズ 0 に切り詰め)」などが対象外であるため、ファイル書き込み時の処理に上述のような「アペンドディレクトリが用いられない」挙動が発生することになります。

また、「/X:ON」が設定されているときは以下のMS-DOSシステムコールもアペンドディレクトリを用いるようになります。

  • 11H - 最初に一致するファイルの検索(Find first file)
  • 4BH - プログラムの実行
  • 4EH - 最初に一致するファイルの検索:追加情報取得あり(Find first file)

Appendの常駐と /E スイッチ

Appendは最初の実行時にシステムに常駐され、以降の「Append」呼び出しは常駐されたAppendプログラムを利用して処理が行われます。あくまで常駐であるため、システムをリセット(再起動)すると設定内容が失われます。

/E スイッチを用いて常駐を行うと、Appendは環境変数「APPEND」にアペンドディレクトリを保存するようになります。これもまた環境変数にすぎないため、やはりリセットすると設定内容が失われます。ただし環境変数経由でアペンドディレクトリ設定値を取得することができるようになるため、Setコマンドでの一覧に表示されたり「%」文字での環境変数展開に利用することができたりします。

※ /E で常駐させた場合、Setコマンドで「APPEND」環境変数を書き換えることでもアペンドディレクトリを変更することができるようになります。また、常駐前に環境変数「APPEND」が設定されている場合、/E オプション付きで常駐を行うとその値がアペンドディレクトリとなります。

サンプル1

append c:\data;d:\data

アペンドディレクトリとして「C:\DATA」と「D:\DATA」を設定し、これらのディレクトリ直下にあるファイルをパス名無しに参照できるようにします。

サンプル2

(まだAppendが実行されていない場合での実行)

set APPEND=D:\Bin
append /E /X:ON

アペンドディレクトリとして「D:\Bin」を設定し、そのディレクトリ内のプログラムをパス無しに実行可能にします。また、アペンドディレクトリの設定に対して環境変数「APPEND」を利用するようにします。

関連項目