DOS窓について



1.DOSプロンプトについての注意
 DOSプロンプトでの実行環境は、"CONFIG.SYS"および "AUTOEXEC.BAT"ファイルにて指定されます。
 例えば、実行ファイルの場所を検索するためのパスの設定では、"AUTOEXEC.BAT"ファイルで次のように指定します。
    PATH PATH1;PATH2;...;PATHn[;%PATH%]
ここで、PATHiは"C:\DOS"のように、パスを通したいディレクトリを指定します。 "%PATH%"は、既にPATHを設定している場合、以前のパス指定を引き継ぐものです。

 ただし、Windows XP等ではこの環境変数の設定は AUTOEXEC.BAT に設定するのではなくて、以下のように行ないます。

    (1)デスクトップの[マイコンピュータ]のアイコンを右クリックして[プロパティ]を選択します。

    (2)[システムのプロパティ]画面の[詳細設定]のタブを開き、[環境変数]をクリックします。

    (3)[環境変数]画面の[システム環境変数]に表示されている「Path」の変数を編集します。パスの指定の仕方は上記と同じです。

 ファイルやディレクトリ(フォルダとも)は一般に次のように指定します。
    [ドライブ:][パス\]ファイル

    [ドライブ:][パス\]ディレクトリ
ドライブはディスク装置などの識別文字で、例えば 'C'というのは第1ディスク装置の第1論理ドライブとなります。 また、'A'は第1FD装置となります。 以前は2つのFD装置があったことより、'B'というのも使用されましたが、現在はハードディスクが一般的となり、2つのFD装置を使用するのは無意味なことになりました。
 また、あるディレクトリを仮想ドライブに指定することもでき、その場合のドライブというのは、そのディレクトリを意味します。
 もしパスやファイル名等にスペースを含む場合には、全体を'"'で囲んで指定します。

 パスは、ファイルやディレクトリの親ディレクトリをルート('\')またはカレントディレクトリから指定したものです。 これが多くの階層からなる場合には、各ディレクトリを '\'で区切って指定します。 (ただし、これは日本語キーボードの場合であり、英語キーボードの場合にはバックスラッシュとなります。 UNIXの場合には、ディレクトリを区切るには '/'となります。ホームページでパスを記述する場合には、各ディレクトリを '/'で区切る必要があります。)
 特に、"."はカレントディレクトリを指し、".."は一つ上のディレクトリである親ディレクトリを指します。
 ドライブやパスを省略した場合には、カレントドライブやカレントディレクトリとなります。

 また、デバイスに対してもファイル名が与えられます。 これには以下のものがあります。

    prnプリンタ
    aux補助入力装置
    nulなし
    clockシステムクロック
    conコンソール
しかし、例えば、con.xxxというのもコンソールとして認識されるようです。 もし通常のファイル名として、con あるいは con.xxxを指定した場合、システムがハングアップすることがあるようなので、注意する必要があります。

 コマンドはプロンプトに対して入力しますが、これは promptコマンドを使用して変えることができます。 その際、以下のものを使用できます。

    $T時刻を表示
    $D日付を表示
    $Pパスを表示
    $G

    '>'を表示

2.DOS窓の大きさを変える場合
 DOS窓をフルスクリーンにしたり、ウィンドウ表示に切り替えたりするには、次のようにします。
    (1)メニューより、[設定]の[タスクバー]を実行します。
    (2)メニュー設定タブの[詳細]をクリックします。
    (3)MS-DOSのアイコンを右クリックして、[プロパティ]を選択します。
    (4)スクリーンタブを開き、[使い方]の[フルスクリーン表示]または[ウィンドウ表示]のいずれかをチェックして、OKボタンを押します。

3.バッチファイルについて
 バッチファイルは、"*.BAT"というファイル名で作成します。これはテキストエディタで作成できます。
 この中にコマンド(プログラムの実行の仕方もしくは実行プログラムのこと)を記述したり、バッチ制御文を書きます。
 コマンドを実行する場合に注意しておくべきこととして次のことが挙げられます。
 一般的に言って、DOSで実行されるプログラムはC言語で作成されます。 これは、標準入力、標準出力、標準エラー出力という概念があります。 標準入力というのは、プログラムでの入力を「標準入力」としてあるものです。 これは通常は画面入力データが入力となります。しかし
    コマンド < ファイル名
とすることによって、入力をファイルにすることが可能になります。 この 最後の "< ファイル名"という記述は標準入力のリダイレクトと呼ばれます。
 また、パイプを用いて、他のコマンドからの標準出力を入力にすることもできます。 パイプというのは、他のコマンドの標準出力を標準入力として受け取るというものです。 この場合、
    コマンド1 | コマンド2
というように記述されます。これは、コマンド1の標準出力をコマンド2が標準入力として受け取るということになります。例えば次のようなものがそうです。
    type abc.txt | more
しかしこのことはパイプで受け取るプログラムが入力を標準入力で受け取るようになっているものに限られます。
 標準的な出力としては2種のものがあり、それは標準出力と標準エラー出力です。 どちらも通常は画面に出力されます。 ただし標準出力の方は標準出力のリダイレクトによってファイルに出力したりすることができます。 これは次のように指定するものです。
    コマンド > ファイル
または
    コマンド >> ファイル
'>'はファイルに標準出力を書き込みます。もしこのファイル名のものがある場合には、上書きされます
'>>'はファイルに標準出力を追加します。

 バッチファイルで引数(パラメータ)を参照するには次のように記述します。
    %n … nは 0から 9までの数字。
%0はバッチファイル名、%1から%9までは、n番目の引数となります。 もし引数の数が10以上の場合には、"SHIFT"文で1つずらしながら参照します。
 バッチファイルでは環境変数を設定したり、参照することができます。環境変数を設定する場合には次のようにします。
    SET 環境変数=文字列
環境変数を参照するには、次のようにします。
    %環境変数名%
次にバッチ制御文としては、以下のものがあります。
・ECHO文

ECHO文は、バッチファイルの実行内容の表示を制御したり、メッセージを表示するもので、次のように指定します。
    @ECHO OFF実行内容の表示を停止します。
    ECHO ON実行内容の表示を行います。
    ECHO メッセージメッセージを表示します。
    ECHO.画面を改行します。

・コメント文
コメント文は、コメント文を書いたりするものです。大抵はバッチファイルの中の実行を無効とするために用います。これは次のように指定します。
    REM コメント

・ラベル
ラベルは、バッチファイルの中での行位置を識別するために用います。これは次のように指定します。
    :ラベル名

・GOTO文
GOTO文は、バッチファイルの実行を別の箇所(ラベルで指定されている箇所)に移動する場合に用います。 これは次のように指定します、
    GOTO ラベル名

・IF文
IF文は、条件を判断して、条件が真となる場合にコマンドを実行するものです。これは次のように指定します。
    IF [NOT] 条件 コマンド

"NOT 条件"の場合には、条件が偽の場合にコマンドが実行されます。

条件には以下のものを指定できます。

    ERRORLEVEL 番号
    これは直前に実行したコマンドの終了コードが番号以上の場合に真となります。 なお、一般にコマンドは終了コードを返します。

    文字列1==文字列2
    これは文字列1と文字列2が等しい場合に真となります。ただし、文字列が空である場合には、文字列として '""'を指定します。

    EXIST ファイル名
    これはファイル名が存在する場合に、真となります。

・PAUSE文
PAUSE文は、バッチファイルの実行を一時中断するものです。これは次のように指定します。
    PAUSE [コメント]

ここで処理を中止したい場合には、CTRL+Cを押すと、次のメッセージが表示されるので、
    "バッチ処理を終了しますか (Y/N)?"
Yと入力します。

・CHOICE文
CHOICE文は、指定メッセージを表示して、バッチ処理の動作を変更するのに使用されます。これは、次のように指定します。
  CHOICE [/C[:]選択肢] [/N] [/S] [/T[:]c,nn] [文字列]

スイッチの意味は次の通りです。
    /C[:]選択肢選択肢として有効なキーを指定します。既定値は"YN"です。
    /Nプロンプトの終わりに選択肢と'?'を表示しません。
    /S 選択キーの大文字/小文字を区別します。
    /T[:]c,nnnn秒経過した後の選択肢の既定値を c に設定します。
    文字列 表示するプロンプト文字列を指定します。

選択肢から何が選択されかは、ERRORLEVELを参照して判断します。ERRORLEVELには、選択文字の先頭より1から連番の値が入ります。例えば、2番目の文字を選択した場合には、2が入ります。

例.
    @ECHO OFF
    CHOICE /C:YN /N "ファイルを上書して宜しいですか? (Y/N) "
    REM 比較する場合は、値が大きいものから行なうようにする。
    IF ERRORLEVEL 2 GOTO END
    IF ERRORLEVEL 1 GOTO CONT
    :CONT
    ……
    :END

・CALL文
他のバッチファイルを実行する場合に指定します。これは次のように記述します。
    CALL バッチファイル名 [引数 ...]

バッチファイルの実行が終了したら、戻ってきます。

4.バッチファイルへの関連付け
 ファイルをあるウィンドウ・プログラムに関連付けて実行できるように、バッチファイルに対しても関連付けが同様に行なえます。
 関連付けで実行されるバッチファイルの方では、そのファイル名は"%1"で読み取ることができます。
たとえば、バッチファイルが次のようになっている場合
    "C:\Program Files\Accessories\MSPAINT.EXE" %1
ダブルクリックした(ビットマップ)ファイルが、MSPAINT.EXEで表示されます。
 ここで問題になるのが、DOS窓が開いたままになってしまうことです。 これを自動的に閉じるようにするには、バッチファイルのあるディレクトリに作成されたPIFファイルを変更します。 (PIFファイルは、バッチファイルをダブルクリックして起動すれば簡単にできます。このファイル名は、"拡張子を除いたバッチファイル名.PIF"となります。) 変更方法は次のようにします。
 エクスプローラでPIFファイルを右クリックして、[プロパティ]を選択します。 次に、[プログラム]タブを開き、「プログラム終了時にウィンドウを閉じる」にチェックを付けます。


5.DOSコマンドについて
 コマンドの形式は一般に次のようになります。
    コマンド名 [スイッチ] 引数1[引数2 …]
    コマンド名 引数1[引数2 …] [スイッチ]
 スイッチはコマンドの実行を制御するもので、これは'/'を付けて指定します。
 なお、これはUNIXのコマンド形式では、"-..."のオプションに相当するものです。 UNIXの場合、'/'はディレクトリまたはファイルの区切り文字となることより、'/'をオプション指定文字に使用することはできません。 また、UNIXではファイル名とオプションの区別がつきにくいものとなっています。 というのは、ファイル名に'-'を付けることが可能だからです。 おそらく、このことがディレクトリ及びファイルの区切り文字を'/'から逆スラッシュに変えた理由ではないかと思われます。
 しかし、日本語の場合、逆スラッシュの文字を'\'文字に変えてしまっていることより、妙な表示になっています。尤も、これは慣れの問題ではありますが。
 MS-DOSの仕様として、ファイル名の大文字と小文字を区別しない(ここが UNIXの場合と大きく異なる点といえます)ということより、コマンド名やスイッチは大文字でも小文字でもかまいません。
 以下に比較的よく用いるコマンドおよびそのスイッチについて記述します。 (詳細については、コマンド名の引数として "/?"を指定して起動すれば、ヘルプが表示されます。)

(1)CDコマンド
 ドライブやパスを変更します。これは次のように指定します。

    CD ドライブ指定ドライブに移動します。
    CD パス指定パスのディレクトリに移動します。
    CD ..親ディレクトリに移動します。
 なお、現状のドライブやパスのことはカレントドライブ、カレントパスと呼ばれます。

(2)ATTRIBコマンド
 ファイルの属性を変更します。属性には以下のものがあります。
    R … リードオンリー属性
    A … アーカイブ属性
    S … システム属性
    H … 隠しファイル属性
 コマンドの形式は次のようになります。
    ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] ファイル名 [/S]
ここで、"+属性"は指定属性の設定、"-属性"は指定属性の解除となります。 "/S"は、指定パスの全てのディレクトリについて行う場合に指定します。

例えば、

    ATTRIB -R -S -H . /S
は、カレントディレクトリ以下の全てのファイルを書き込み可にし、システム属性及び隠し属性を解除します。

(3)COPYコマンド
 ファイルのコピーや連結を行います。これは次のように指定します。
    COPY ファイルファイルをカレントパスにコピーします。
    COPY ファイル1 ファイル2ファイル1をファイル2にコピーします。
    COPY ファイル ディレクトリ ファイルをディレクトリにコピーします。
    COPY ディレクトリディレクトリの全ファイルをカレントディレクトリにコピーします。
    COPY ディレクトリ1 ディレクトリ2ディレクトリ1の全ファイルをディレクトリ2にコピーします。
    COPY ファイル1+…+ファイルn
      ファイル名
    ファイル1からファイルnまでのファイルを連結して、ファイル名のファイルとして作成します。

(4)MOVEコマンド
 ファイルの移動またはディレクトリの変更を行ないます。これは次のように指定します。
    MOVE ファイル[,…] ディレクトリファイル(複数指定可)をディレクトリに移動します。
    MOVE ディレクトリ1 ディレクトリ2ディレクトリ1をディレクトリ2に移動します。
 スイッチには以下のものがあります。
    /Yファイルを上書きする前に確認のメッセージを表示しない。
    /-Yファイルを上書きする前に確認のメッセージを表示する。
(5)DATEコマンド
 日付を設定します。これは次のように指定します。
    DATE [年-月-日]
(6)DEL(ERASE)コマンド
 ファイルの削除をします。これは以下のいずれかを指定します。
    DEL ファイル(ワイルドカード可)
    DEL ディレクトリ
DELの代りにERASEとしても同じになります。
 ディレクトリを指定した場合には、指定ディレクトリ内のファイルが削除されます。
ワイルドカードとしては、'?'(任意の一文字)や '*'(任意の文字列)を指定することができます。

 スイッチには、次のものが指定できます。

    /P削除する前に確認します。
(7)DIRコマンド
 ディレクトリの内容を表示します。これは次のように指定します。
    DIRカレントディレクトリの内容を表示します。
    DIR ファイル(ワイルドカード可)指定ファイルを表示します。
    DIR ディレクトリ指定ディレクトリの内容を表示します。

 よく用いるスイッチには、次のものがあります。

    /P1画面表示する毎に停止します。
    /W1行に5つずつファイル名を表示します。
    /Sサブディレクトリも表示します。
    /O[:[-]ソート順] ソートして表示します。
    ソート順を省略すると、ディレクトリを先に表示します。

    ソート順は以下の文字を指定します。
      N … アルファベット順
      E … 拡張子順
      D … 日付順
      S … サイズ順
      G … ディレクトリ、ファイル順
    ソート順の前に '-'をつけた場合には、逆順となります。
DIRコマンドのスイッチは環境変数"DIRCMD"に設定しておくことができます。

(8)DOSKEYコマンド
 コマンド実行の履歴をとります。これによって、以前に実行したコマンドを呼び出すことができるようになります。また、コマンドをマクロ登録できます。
この詳細については、ヘルプを参照して下さい。
 Windows XP等については、特にこの指定をする必要はありません。

(9)EDITコマンド
 テキストファイルを編集します。これは次のように指定します。
    EDIT ファイル(ワイルドカード可)
(10)FCコマンド
 2つのファイル内容を比較します。これは次のように指定します。
    FC ファイル1 ファイル2
スイッチについてはこのコマンドのヘルプ(/?)を参照して下さい。

(11)FINDコマンド
 ファイルから文字列を検索します。これは次のように指定します。
    FIND "文字列" ファイル
スイッチについてはこのコマンドのヘルプ(/?)を参照して下さい。

(12)MOREコマンド
 ファイルの内容をページ毎に表示します。 ファイル名を入力しない場合には、標準入力から読み込まれます。

例.

    more abc.txt
    type abc.txt | more 
    more < abc.txt 
上記はいずれもabc.txtを1ページ毎に表示するものです。
 なお、これで注意すべきことは、ファイルに漢字がある場合、つまり2バイトコードがある場合、 漢字がちょうど行(80バイト)の終端をはみだすときには、その前に ' 'が付加されることです。 このため、moreで出力したものは、元のファイルと必ずしも同一にはなりません。

(13)PATHコマンド
 コマンドファイルの検索パスを設定したり解除します。 これは次のように指定します。
    PATHパスの設定内容を表示します。
    PATH パス1[;パス2…]各パスを設定します。
    PATH ;パスを解除します。

(14)REN(RENAME)コマンド
 ファイル名またはディレクトリ名を変更します。これは次のように指定します。
    REN 変更前のファイル名 変更後のファイル名
    REN 変更前のディレクトリ名 変更後のディレクトリ名
変更後のファイル名やディレクトリ名にはドライブやパスをつけることはできません。
つまり、これは該当ディレクトリ内の名称の変更となります。

(15)RD(RMDIR)コマンド
 ディレクトリを削除します。 ただし、ディレクトリは隠しファイルのものも含めて空である必要があります。
 RDコマンドは次のように指定します。
    RD ディレクトリ
(16)SETコマンド
 環境変数を設定します。これは次のように指定します。
    SET現在設定されている環境変数を表示します。
    SET 環境変数=文字列指定環境変数に指定文字列を設定します。
    SET 環境変数=指定環境変数を削除します。
設定された環境変数はバッチファイルの中で、"%環境変数%"として参照できます。

(17)SORTコマンド
 テキストファイルをソートします。 また、標準入力からも入力でき、標準入力からのテキスト行をソートします。
 SORTコマンドは次のように指定します。
    SORT ファイルファイルをソートします。
    コマンド | SORTコマンドが標準出力に出力したテキスト行をソートします。
 スイッチは、次のものが指定できます。
    /R逆順にソートします。
    /+nn行目からソートします。
(18)SUBSTコマンド
 ディレクトリをドライブ(文字)で参照できるようにします。 ただしドライブ文字は未使用のものに限ります。
 SUBSTコマンドは次のように指定します。
    SUBST仮想ドライブを表示します。
    SUBST ドライブ: パス指定ドライブ文字を指定パスに設定します。
    SUBST ドライブ: /D指定仮想ドライブを削除します。
(19)TIMEコマンド
 時刻を設定します。これは次のように指定します、
    TIME [時:分:秒]
(20)TYPEコマンド
 テキストファイルの内容を表示します。これは次のように指定します。
    TYPE ファイル名
(21)XCOPYコマンド
 これはファイルのコピーもできますが、主に階層的ディレクトリをコピーするのに使用します。
 XCOPYコマンドは次のように指定します。
    XCOPY ファイル (複数可)指定ファイルをカレントディレクトリにコピーします。
    XCOPY ファイル (複数可) ディレクトリ指定ファイルを指定ディレクトリにコピーします。
    XCOPY ファイル1 ファイル名2ファイル1をファイル名2にコピーします。
    XCOPY ディレクトリ指定ディレクトリをカレントディレクトリにコピーします。
    XCOPY ディレクトリ1 ディレクトリ2ディレクトリ1をディレクトリ2にコピーします。
 よく用いられるスイッチとしては次のものがあります。
    /Sサブディレクトリもコピーします。
    /M

     


     
    アーカイブ属性がついているファイルのみをコピーします。
    コピーした後、元のファイルのアーカイブ属性は解除されます。
    つまり、これは新規に作成したファイルまたは変更があったファイルのみをコピーしようとするものです。
 XCOPYコマンド(コピー元としてパス名を使用した場合)とWindowsのエクスプローラなどのファイラーのコピーとで紛らわしいのは、前者がコピー先のディレクトリにはコピー元のディレクトリ配下のファイル等がコピーされるのに対して、後者ではコピー元のディレクトリからコピーされる点です。 この点を勘違いして使用すると、ファイルを上書きしてしまったりします。
 他にこれを使用して注意する必要があるのは、不可視属性のファイルはコピーされないことです。
 以上の注意点は、COPYコマンドについてもいえます。

(22)FOR制御文
 引数を順に変えて同一コマンドを実行する場合には、FORを使用することで実現できます。 これは次のように指定します。
    FOR %変数名 IN (引数の並び) DO コマンド
引数の並びは、カンマまたはスペースで区切って指定します。これにはワイルドカードを指定することができます。ワイルドカードを指定した場合には、該当のファイル名の並びに置換されます。
 引数の並びは、順に "%変数名"にセットされて、コマンドが実行されます。 コマンドの中で、この引数を参照する場合には、"%変数名"を指定します。
 しかし、コマンドにはリダイレクト("> …"及び "< …")を含めることはできません。このため、リダイレクトに"%変数名"を書いても置換されません。

例.
    FOR %x IN (*.txt) DO TYPE %x
これはカレントディレクトリの "*.txt"に一致する全てのファイル内容を表示します。