MS−DOSとバッチファイル
 
 
 
 
      1 基本コマンドとファイル操作
       1.1 起動と終了 ・・・・・・・・・・・・・・・・・・・・・・ 1
       1.2 ファイルについて ・・・・・・・・・・・・・・・・ 1
       1.3 リダイレクトとパイプ ・・・・・・・・・・・・ 3
       1.4 主要コマンド機能一覧 ・・・・・・・・・・・・ 4
       1.5 コマンド練習 ・・・・・・・・・・・・・・・・・・・・ 5
       1.6 エディター red 使用法 ・・・・・・・・ 6
       
      2 バッチファイル
       2.1 バッチファイルとは ・・・・・・・・・・・・・・ 7
       2.2 バッチファイルにおける引数 ・・・・・・ 8
       2.3 バッチファイルにおける制御 ・・・・・・ 9
       2.4 if 文字列1==文字列2 ・・・・・・・ 10
       2.5 if [not] exist ・・・・・・ 13
       2.6 if errorlevel ・・・・・・・ 13
 
       提出課題1 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 17
       
       2.7 for ループによる繰り返し ・・・・・ 21
       2.8 shift による繰り返し ・・・・・・・ 22
 
      3 パスの設定とフィルター処理
       3.1 パスの設定 ・・・・・・・・・・・・・・・・・・・・・・ 24
       3.2 フィルタ処理 ・・・・・・・・・・・・・・・・・・・・ 25
 
       提出課題2 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 26
 
      MS−DOSコマンドマニュアル ・・・・・・・・・・・ 29
 
 
 
 
 
        1 基本コマンドとファイル操作
 
1.1 起動と終了
 
■ MS−DOS 状態にするには?
(1) メニュー画面で G(MS−DOS) を選択する.
(2) プロンプト G:\> が表示される.
 
■ ドライブを移動するには?
(1) Bドライブに,フロッピーディスクをセットする.
(2) B:  (リターン) 入力する.
(3) プロンプトが B:\> に変わる.
 
■ コマンドを実行してみる
[1] echo ・・・・・・・・ メッセージを表示する.
    (例) echo Hello, World!
[2] date ・・・・・・・・ 日付の表示と設定をする.
    (例) date
[3] time ・・・・・・・・ 時刻の表示と設定をする.
    (例) time
[4] cls ・・・・・・・・・ 画面を消去する.
    (例) cls
[5] dir ・・・・・・・・・ ファイルの情報を表示する.
    (例) dir
       dir /w
       dir *.jsw
       dir *.bas
       dir *.dat
[6] chkdsk ・・・・・・ ディスクの状態を表示する.
    (例) chkdsk
       chkdsk /v
 注意 MS-DOS においては大文字と小文字の区別をしない.
 
■ MS−DOS を終了するには?
(1) exit と入力する.
(2) メニュー画面に戻る.
 
1.2 ファイルについて
 
 ファイルとは,ひとまとまりのデータを集めたものである.文書,プログラム,
処理対象となるデータなどを一つのファイルとして保存することができる.
 
 ファイル名は,8文字以内の名前と3文字以内の拡張子で構成される.
    (例) find.exe ・・・・・・ 名前が find 拡張子が exe
 
 ファイルの種類は拡張子で区別できる(次ページの表を参照).
 
 ● テキスト形式のファイルは type コマンドで内容を見ることができる.
 
 ● 実行可能ファイルを実行するには,名前を入力する.
    (例) prog001.exe を実行  => prog001
       dbak.bat を実行   => dbak
 
    拡張子  種類 実行  コード
     exe
     com
     bat
     obj
     sys
     txt
     dat
     dic
     bas
     c
     frt
 ロード・モジュール  
 ロード・モジュール  
 バッチファイル    
 オブジェクト・モジュール
 デバイス・ドライバ
 文書      
 データ     
 辞書      
 BASICプログラム  
 C言語ソース  
 FORTRANソース 
 可 
 可 
 可 
不可 
不可 
不可 
不可 
不可
不可 
不可 
不可 
 機械語
 機械語
 テキスト
 機械語
 機械語
 テキスト
 テキスト
  機械語
 テキスト
 テキスト
 テキスト
 
 ● ファイルの管理
   次の図のように,ルート・ディレクトリ(\ で表す)の下に,サブ・ディ
  レクトリ man, bat, bin, progc などを作成して,ファイルの種類別に格
  納すれば,ファイルの管理が明瞭にできる.このような構造を,階層的ディ
  レクトリ構造という.
 
    \     man     dir.man
cls.man
chkdsk.man
type.man
more.man
mkdir.man
chdir.man
copy.man
del.man

























 







 
 
 
 
 
 
 

 
 
  bat     day.bat
dskstate.bat
lp.bat
dbak.bat
man.bat



 
 
 

 
 
  addpath.bat
 
  progc     prog001.c
prog002.c
prog003.c

 

 
 
  bin     prog001.exe
prog002.exe
prog003.exe

 

 
 
  work
 
 ● ワイルドカードの ? または * を使うと,特定の条件を満たすファイルに対
  してまとめてコマンドを実行することができる.
 
        ? ・・・・・ 任意の1文字に相当する
        * ・・・・・ 任意の複数文字に相当する
 
    (例) test*.exe には次のようなファイルがマッチする.
        test.exe    testa.exe    test001.exe
 
    (例) test?.exe には次のようなファイルがマッチする.
        test.exe    testa.exe    test1.exe
 
    (例) *.dat には拡張子が dat である全てのファイルにマッチする.
 
    (例) *.* 全てのファイルにマッチする.
 
1.3 リダイレクとパイプ
 
 デバイス キーボード,スクリーン,プリンタなどの周辺機器をデバイスとい
う.MS-DOS では,これらの周辺機器をデバイス型ファイルとみなし,ディスク・
ファイルと同等に取り扱う.




 
デバイス・ファイル名 入出力   デバイス
   con
           
入力
出力   
  キーボード
  スクリーン
   prn      出力      プリンター 
   nul      出力     捨てられる
 
 リダイレクト 通常はキーボード(標準入力)から入力し,スクリーン(標準
出力)に出力する.ところで,MS-DOS では入出力の対象をファイルと同等に取り
扱うので,標準入出力を切り替えることができる.これをリダイレクトという.
リダイレクトを行うには, < または > を使う.



 

 コマンド > 出力先ファイル名
 コマンド < 入力ファイル名
 
 (例) dir コマンドの出力をファイル files.dat に格納する.
        dir > files.dat
 (例) type コマンドの出力先をプリンターに切り替える.
        type dir.dat > prn
 (例) ファイル copy.man を標準入力に切り替えて,more の入力とする.
        more < copy.man
 
 パイプ パイプとは,コマンドやプログラムの標準出力を,別のプログラムの
標準入力に橋渡しする機能のことである.パイプによって,複数のプログラムを
連結して実行することができる.コマンド1の標準出力をコマンド2の標準入力
に渡すには | を用いる.コマンド2は主にフィルタと呼ばれるコマンド(more,
sort, find)が使われる.


 

 コマンド1 | コマンド2 
 
 (例) type コマンドの出力を more の入力にパイプする.
        type copy.man | more
 (例) dir コマンドの出力を sort の入力にパイプする.
        dir | sort
 (例) dir コマンドの出力を fine の入力にパイプする.
        dir | find "DIR"
 
1.4 主要コマンド機能一覧
 
  システム関連
 
    date ・・・・・・ 日付を表示,設定する.
    time ・・・・・・ 時間を表示,設定する.
    prompt ・・・・ プロンプトを変更する.
 
  ファイル関連
 
    copy ・・・・・・ ファイルのコピーを行う.
    del ・・・・・・・ ファイルの削除を行う.
    print ・・・・・ テキスト・ファイルの内容を印刷する.
    ren ・・・・・・・ ファイル名を変更する.
    type ・・・・・・ テキスト・ファイルの内容を表示する.
 
  ディスク関連
 
    chkdsk ・・・・ ファイルをチェックする.
    dir ・・・・・・・ ディレクトリのファイル一覧を表示する.
    label ・・・・・ ボリューム・ラベルを設定,変更する.
    tree ・・・・・・ ディレクトリのファイル一覧を TREE図 で表示する.
 
  ディレクトリ関連
 
    cd ・・・・・・・・ カレント・ディレクトリを変更する.
    mkdir ・・・・・ サブ・ディレクトリを作成する.
    path ・・・・・・ 検索パスを設定する.
    rmdir ・・・・・ サブ・ディレクトリを削除する.
 
  スクリーン関連
 
    cls ・・・・・・・ スクリーンを消去する.
    echo ・・・・・・ メッセージを出力する.
 
  フィルタ
 
    find ・・・・・・ 文字列を検索する.
    more ・・・・・・ データをページ単位で出力する.
    sort ・・・・・・ データを並べ換える.
 
  バッチ処理用
 
    goto ・・・・・・ バッチ処理の流れを変更する.
    if ・・・・・・・・ 条件判断に応じてバッチ処理を行う.
    pause ・・・・・ バッチ処理を一時中断する.
 
1.5 コマンド練習
 
 (1) サーバー機から次のファイルを受信する.
    chdir.man    chkdsk.man   cls.man     copy.man
    del.man     dir.man     find.man    goto.man
    if.man     mkdir.man    more.man    pause.man
    sort.man    type.man
 
 (2) ディレクトリの内容を表示する.
    dir
 
 (3) テキストファイルの内容を表示する.
    type dir.man
    type type.man
    type cls.man
    type mkdir.man
    type chdir.man
    type del.man
    type copy.man
    type more.man
    type copy.man | more
 
 (4) ディレクトリを作成する.
    md man
    md bat
    md progc
    md bin
    md work
 
   確認する.
    dir
 
 (5) ディレクトリを移動する.
    cd man
    cd ..
    cd bat
    cd \
    cd progc
    cd \bin
    cd ..
    cd work
    cd ..
 
 (6) ファイルをコピーする.
    copy *.man \man
 
   確認する.
    dir \man
    dir \
 
 (7) ファイルを削除する.
    del *.man
 
   確認する.
    dir \
    dir \man
 
 (8) ファイルを印刷する.
    cd \man
    type dir.man > prn
    print type.man
 
 (9) ソートして表示する.
    dir
    dir | sort
 
 (10) 文字列を含む行を表示する.
    dir
    dir | find "SORT"
    dir | find "FIND"
 
1.6 エディター red 使用 
 
■ エディター red を起動するには?
(1) MS−DOS の状態にする.
(2) 次の形式で入力して,リターンキーを押す.


 

 red ファイル名 
 
(3) エディターの編集画面になる.
 
■ 日本語(全角)を入力するには?
 画面右下の表示を 連R漢 とする.
    英小 <=> 連R漢 (かな・漢字 キーを押す)
 
■ 編集とカーソル移動
 編集用キー
   カーソルから右の削除 ・・・・・ CTRL + T
    カーソル行の削除 ・・・・・・・・・ CTRL + Y
    カーソル行の複写 ・・・・・・・・・ CTRL + B
   アンドゥ(直前の状態) ・・・・・ CTRL + ESC
    行番号の表示 ・・・・・・・・・・・・・ CTRL + "
 カーソル移動
   半ページ下へスクロール ・・・ CTRL + C  ( SHIFT + ↓)
   半ページ上へスクロール ・・・ CTRL + R  ( SHIFT + ↑)
   行の左へ ・・・・・・・・・・・・・・・・・ CTRL + Q  ( SHIFT + ←)
   行の右へ ・・・・・・・・・・・・・・・・・ CTRL + W  ( SHIFT + →)
■ エディターを終了するには?
(1) メニュー1を表示するために PF1 キーを押す.
(2) テキスト(プログラム)を 保存する/ しない で終了する.
 
     保存して終了  => S(保存) を選択
     保存せずに終了 => Q(終了) を選択
 
【練習1】
 (1) エディター red を起動しなさい.ただし,ファイル名は day.bat とする.
    red day.bat
 (2) 次のプログラムを入力して保存しなさい.
 
    バッチファイル day.bat

    : day.bat
    :    機能  日付と時刻の表示
    :    書式  day
 
    @echo off
    cls
 
    echo ******** 現在の日付と時刻を表示します ********
    echo.
    date
    time

 
(3) ディレクトリ内のファイル名を表示して,day.bat が保存されたことを確認
 しなさい.
(4) 画面を消去しなさい.
(5) テキスト・ファイル day.bat の内容を表示しなさい.
(6) テキスト・ファイル day.bat を印刷しなさい.
 
            2 バッチファイル
 
2.1 バッチファイルとは
 
 バッチファイルとは,MS−DOSの複数のコマンドを1行ごとに書き連ねた
テキスト・ファイルである.複数のコマンドを1つずつ入力するかわりに,バッ
チファイルを実行すれば,一度の入力で,複数のコマンドを順次に実行すること
ができる.
  バッチファイルのファイル名は,8文字以内であれば,予約語を除き自由に
   付けることができる.
  バッチファイルの拡張子は,必ず bat でなければならない.
    (例) test.bat
  バッチファイルを実行するには,ファイル名を入力する.
    (例) test.bat を実行 => test と入力
 
【練習2】 ディスクの状態を表示するバッチファイルを作成しなさい.
 (1) エディター RED を起動しなさい.ファイル名は dskstate.bat とする.
    red dskstate.bat
 (2) 次のバッチファイルを作成して,保存しなさい.
 
    バッチファイル dskstate.bat

    : dskstate.bat
    :    機能  ファイル名とディスクの状態を表示
    :    書式  dskstate
 
    @echo off
    cls
 
    echo *********** ディスクの情報を表示します ************
    echo.
    dir /w
    echo.
    chkdsk

 
  (3) ディレクトリ内のファイル名を表示して,dskstate.bat が保存されたこ
   とを確認しなさい.
  (4) 画面を消去しなさい.
  (5) バッチファイル dskstate.bat を実行しなさい.
  (6) テキスト・ファイル dskstate.bat の内容を表示しなさい.
  (7) テキスト・ファイル dskstate.bat を印刷しなさい.
 
2.2 バッチファイルにおけるの引数
 
 例えば copy repo1.txt a:\report2.txt とするとき,repo1.txt を copy コマンドの第1引数,a:\report2.txt を第2引数という.
 バッチファイルの実行中には,何らかの値を与えることはできないので,バッ
チ・コマンドを入力する際に,必要な値は引数として与えることになる.バッチ
プログラム内で引数を利用するときには,%1, %2, ..... と表す.これらはバッ
チファイルの実行時に,引数として入力した値に置き換えられる.
 
【練習3】 テキストファイルの内容を,一画面ごとに表示するバッチファイル
 mytype.bat を作成しなさい.ただし,
 
  ・ 表示するファイルのファイル名を第1引数とする.
  ・ はじめに画面を消去する.
  ・ ファイル名を表示する.
  ・ ファイル内容を一画面ごとに表示する.
 
    バッチファイル mytype.bat

    : mytype.bat
    :    機能  ファイル内容を一画面ごと表示する
    :    書式  mytype ファイル名
 
    @echo off
    cls
 
    echo ******************* ファイル名: %1 ******************
    echo.
    psuse.
    echo.
 
    type %1 | more

 
【練習4】 ファイルを移動(コピーしてから元のファイルを削除)する機能を
 もつバッチファイル move.bat を作成しなさい.
 
    バッチファイル move.bat

    : move.bat
    :    機能  ファイル1 を ファイル2 に移動する
    :    書式  move ファイル1 ファイル2
    :         (書式は copy と同じ)
 
    @echo off
    cls
 
    echo ファイル %1 を ファイル %2 に移動します .......
    echo.
    copy %1 %2 > nul
    del %1
 
    echo 終了しました.

 
2.3 バッチファイルにおける制御
 
■ バッチ処理の流れを変えるには?
 バッチ処理の流れを制御するには,次のバッチファイル用コマンドがある.
 
    * 無条件分岐 ・・・・・・・・・・ goto
    * 条件分岐 ・・・・・・・・・・・・ if, if exist
    * 一時停止 ・・・・・・・・・・・・ pause
 
【練習5】 次のテキストファイルの内容を表示しなさい.
    goto.man    if.man    pause.man
 
■ 一時停止をするには?
 処理の流れを一時停止してするためには,コマンド pause を使用する.すなわ
ち,処理1と処理2の間で一時停止したいときは次のように記述する.






 

 処理1

 pause

 処理2
 
 
【練習6】 テキストファイルの内容を印刷するバッチファイル lp.bat を作成
 しなさい.ただし,
 
  ・ 印刷するファイルのファイル名を第1引数する.
  ・ 途中で流れを一時停止をして,プリンターの準備ができているかを確かめら
    れるようにする.
 
    バッチファイル lp.bat

    : lp.bat
    :    機能  ファイル内容の印刷
    :    書式  lp ファイル名
 
    @echo off
    cls
 
    echo ファイル %1 を印刷します.
    echo プリンターの準備はできていますか?
 
    pause
 
    type %1 > prn
 
    echo 印刷が終了しました.

 
■ 条件分岐をするには?
 バッチ処理の流れを条件の真偽で選択できるようにするには,バッチファイル
用内部コマンド if を使用する.
  

 

 if [not] 条件 コマンド
 
if コマンドは,条件 に応じてコマンドを実行する.条件が真であればコマンド
を実行し,偽であれば次の行に処理が移る.not を指定した場合は,条件の真偽
が逆になる.コマンド部では主に goto を用いて選択的処理を行う.例えば
 
    条件が真 => 処理1
    条件が偽 => 処理2
 
としたいときには,goto コマンドとラベルを用いて以下のように記述する.









 

 if 条件 goto label
 :else
     処理2
     goto end
 :label
     処理1

 :end
 
 
2.4 if 文字列1== 文字列2
 
 文字列比較 コマンド if の条件部で2つの文字列を比較し,選択的に処理を
行うことができる.ヌル文字と比較することもあるので,それぞれの文字列をダ
ブルクォテーション ” で囲むようにするとよい.


 

 if [not] "文字列1"=="文字列2" コマンド
 
 例 バックアップファイル(*.bak)を削除するコマンド dbak を作成する場合
を考えてみる.使用法は
 
        dbak [ディレクトリ名]
 
とし,指定ディレクトリ内のバックアップファイルを削除する.ディレク トリ名
を省略したときには,現在のディレクトリを対象にする.そのためには,if を用
いて以下のように記述する.
 
        if "%1"=="" goto current
 
        :else
            del %1\*.bak
            goto end
        :current
            del *.bak
        :end
 
【練習7】 バックアップ・ファイルを削除するバッチファイル dbak.bat を作
 成しなさい.ただし,
 
  ・ バックアップ・ファイルのあるディレクトリのパス名を,第1引数とする.
  ・ 第1引数を省略して単に dbak としたときには,カレント・ディレクトリ
    のバックアップ・ファイルを削除する.
  ・ 削除を行う前に実行を一時停止して,削除してよいかどうかを確認できる
    ようにする.
 
    バッチファイル dbak.bat

    : dbak.bat
    :    機能  バックアップ・ファイルを削除する
    :    書式  dbak [パス名]
    :           パス名を省略するとカレント・ディレクトリ
    :           内のバックアップ・ファイルを削除する
 
    @echo off
    cls
 
    if "%1"=="" goto current
 
    :else
        echo ディレクトリ %1 内のバックアップ・ファイルを
        echo 削除します.....
        pause
 
        del %1\*.bak
 
        goto end
 
    :current
        echo カレント・ディレクトリ内のバックアップ・ファイルを
        echo 削除します.....
        pause
 
        del *.bak
 
    :end
        echo 終了しました.

 
 多重分岐 バッチ処理で多重分岐をするには if 文を並記する.例えば画面の
表示色を変更するコマンド color を作成してみよう.使用法は
 
        color 色指定
 
とする.色指定は次の7色で多重分岐するにはどうすればよいだろうか.
 
    /r または /R と指定 => 赤色(red)
    /g または /G と指定 => 緑色(green)
    /y または /Y と指定 => 黄色(yellow)
    /b または /B と指定 => 青色(blue)
    /m または /M と指定 => マゼンダ色(mazarine)紫色
    /c または /C と指定 => シアン色(cyanic)水色
    /w または /W と指定 => 白色(white)
 
画面の出力の色を変えるには,次の制御文字(escape sequence)をエコーする.
 
        $e[31m ・・・・・・・・・・・ 赤色 (red)
        $e[32m ・・・・・・・・・・・ 緑色 (green)
        $e[33m ・・・・・・・・・・・ 黄色(yellow)
        $e[34m ・・・・・・・・・・・ 青色(blue)
        $e[35m ・・・・・・・・・・・ マゼンダ色(mazarine)紫色
        $e[36m ・・・・・・・・・・・ シアン色(cyanic)水色
        $e[37m ・・・・・・・・・・・ 白色(white)
 
ただしエディターの red では $e と入力しても esc のコードにならない.esc
コードを入力するには,PF3 を押し,メニューの ASCII CODE list を使用する
 
    バッチファイル color.bat
  
    :
    :        color.bat
    :
    :    function : change color
    :    usage  : color name
    :
 
    @echo off
    cls
 
    if "%1"=="/r" echo $e[31m
    if "%1"=="/R" echo $e[31m
    if "%1"=="/g" echo $e[32m
    if "%1"=="/G" echo $e[32m
    if "%1"=="/y" echo $e[33m
    if "%1"=="/Y" echo $e[33m
    if "%1"=="/b" echo $e[34m
    if "%1"=="/B" echo $e[34m
    if "%1"=="/m" echo $e[35m
    if "%1"=="/M" echo $e[35m
    if "%1"=="/c" echo $e[36m
    if "%1"=="/C" echo $e[36m
    if "%1"=="/w" echo $e[37m
    if "%1"=="/W" echo $e[37m

 
【練習8】 color.bat で単に color と入力したときには,使用法を
 
        Usage : color [/r /g /y /b /m /c /w]
 
 と表示するように改良しなさい.
 
2.5 if [not] exsit 
 
 コマンド if の条件部でファイルの存在(非存在)を判定してから,コマンド
を実行することができる.


 

 if [not] exist ファイル名 コマンド
 
 例 ファイル名を入力し,指定ファイルが存在するかどうかを表示するコマン
ド exist を作成してみよう.
 
    バッチファイル exist.bat

    :
    :        exist.bat
    :
    :    機能 : ファイルの存在をチェックする
    :    使用法:  exist filename
    :
 
    @echo off
    cls
 
    if exist %1 goto something
    :else
        echo ファイル %1 は存在しません.
        goto end
    :something
        echo ファイル %1 は存在します.
    :end

 
2.6 if errorlevel
 
 プログラムの返す終了値(エラーコード番号)をテストして,終了値がある値
以上かどうかで多重分岐をすることができる.


 

 if errorlevel 値 コマンド
 
 例 0から9までのキー入力を受け付けて,その値を終了値として返すプログ
ラム batkey を用意して,メニュー形式のバッチファイルを作成できる.画面の
表示色を変更するバッチファイル color をメニュー形式にしてみよう.
 
    バッチファイル chcolor.bat
  
    :
    :        chcolor.bat
    :
    :    機能 : 表示色の変更
    :    使用法: chcolor
    :
 
    @echo off
    cls
 
    echo 1 ...... red
    echo 2 ...... green
    echo 3 ...... yellow
    echo 4 ...... blue
    echo 5 ...... mazarine
    echo 6 ...... cyanic
    echo 7 ...... white
    echo.
    echo Enter number:
    batkey
 
    if errorlevel 7 goto white
    if errorlevel 6 goto cyanic
    if errorlevel 5 goto mazarine
    if errorlevel 4 goto blue
    if errorlevel 3 goto yellow
    if errorlevel 2 goto green
    if errorlevel 1 goto red
    if errorlevel 0 goto white
 
    :red
        echo $e[31m
        goto end
    :green
        echo $e[32m
        goto end
    :yellow
        echo $e[33m
        goto end
    :blue
        echo $e[34m
        goto end
    :mazarine
        echo $e[35m
        goto end
    :cyanic
        echo $e[36m
        goto end
    :white
        echo $e[37m
    :end

 
【練習9】 個人用特別メニューを起動するバッチファイル mymenu.bat 完成せ
 よ.
 
    バッチファイル mymenu.bat
  
    :
    :        mymenu.bat
    :
 
    @echo off
 
    :start
    cls
    echo $e[05;18H $e[33m << 個人用特別メニュー >>
    echo $e[07;18H $e[33m *******************************
    echo $e[09;20H $e[32m  1 ..... B A S I C
    echo $e[11;20H $e[32m  2 ..... アシストカルク
    echo $e[13;20H $e[32m  3 ..... 一  太  郎
    echo $e[15;20H $e[32m  4 ..... タ イ プ 練 習
    echo $e[17:20H $e[32m  0 ..... 終     了
    echo $e[19;18H $e[33m *******************************
    echo $e[21;18H 番号を入力して下さい:
    batkey 21 42
 
    if errorlevel 4 goto typing
    if errorlevel 3 goto taro
    if errorlevel 2 goto calc
    if errorlevel 1 goto basic
    if errorlevel 0 goto end
 
    :basic
        f:
        cd \basic
        fbasic
        cd \
        b:
        goto start
 
    :calc
        f:
        cd \2020
        m2020
        cd \
        b:
        goto start
 
    :taro
        set oldpath=%path%
        set path=e:\jsw;e:\taro4;e:\jsut
        jxw
        set path=%oldpath%
        goto start
 
    :typing
        b:\etype
        goto start
 
    :end
        cls
        echo $e[11;34H $e[31m Good Bye!
        echo $e[12;34H $e[32m Good Bye!
        echo $e[13;34H $e[33m Good Bye!
        echo $e[14;34H $e[34m Good Bye!
        echo $e[15;34H $e[35m Good Bye!
        echo $e[16;34H $e[36m Good Bye!
        echo $e[17;34H $e[37m Good Bye!
        echo $e[22;00H

 
 注意 batkey.exe はFMRのDOSにはないので,例えば次のプログラムを
コンパイルして使用する.
 
    プログラム batkey.c
  
    /*
            batkey.c
                            */
 
    #include <stdio.h>
    #include <ctype.h>
    #include <conio.h>
 
    #define locate(x,y) printf("\x1b[%d;%dH",x,y)
    #define beep()   printf("\x07")
 
    int main( int argc, char *argv[] )
    {
        char c;
        int n, x, y;
 
        if( argc == 3 ){
            x = atoi( argv[1] );
            y = atoi( argv[2] );
            locate(x,y);
        }
 
        c = getch();
        while( ! isdigit(c) ){
            beep();
            printf("Enter again : ");
            c = getch();
        }
 
        n = c ­ '0';
 
        exit(n);
    }

 
 
            提出課題1
 
【問題1】 練習6で作成したバッチファイル lp.bat に次の機能をつけ加えな
 さい.
 
  ・ 指定したファイルが存在しないならば,「ファイルは存在しません.」と
    表示して終了する.
 
【問題2】 練習7で作成したバックアップ・ファイルを削除するバッチファイ
 ル dbak.bat に次の機能をつけ加えなさい.
 
  ・ バックアップ・ファイルが存在しないならば,「バックアップ・ファイル
    はありません.」と表示して終了する.
 
【問題3】 コマンドのマニュアルを表示するバッチファイル man.bat を作成し
 なさい.ただし,
 
  ・ 参照したいコマンド名を,第1引数にする.
  ・ マニュアル用ファイルがないときには,「登録されていません.」と表示
    する.
  ・ 第1引数を省略して単に man と入力したときには,ディレクトリ \man
    のファイル名一覧を表示して,登録コマンド一覧を参照できるようにする.
 
【問題4】 メニュー形式で問い合わせをしながら,コマンドのマニュアルを表示
 するバッチファイル help.bat を作成しなさい.例えば help と入力すると
 
        *** Command Help ***
    
           chdir ..... 1
           copy ...... 2
           del ....... 3
           dir ....... 4
           find ...... 5
           mkdir ..... 6
           more ...... 7
           sort ...... 8
           type ...... 9
           end ....... 0
    
         Enter :
 
 と表示され,番号を入力すると対応するコマンドのマニュアルが表示される.
 
 
             提出課題1のヒント
 
  問題1 lp.bat のヒント

  : lp.bat
  :    機能  ファイル内容の印刷
  :    書式  lp ファイル名
 
  @echo off
  cls
 
  __ _____ __ ____ _____
  :else
      echo ファイル %1 は存在しません.
      ____ ___
 
  :print
      echo ファイル %1 を印刷します.
      echo プリンターの準備はできていますか?
      pause
 
      type %1 > prn
 
      echo 印刷が終了しました.
 
  :end

 
  問題2 dbak.bat のヒント

  : dbak.bat
  :    機能  バックアップ・ファイルを削除します.
  :    書式  dbak [パス名]
  :        パス名を省略すると,カレント・ディレクトリ内の
  :        バックアップ・ファイルを削除する.
 
  @echo off
  cls
 
  if "%1"=="" goto current
 
  :else
      __ _____ ________ ____ _______
      :else
         echo %1 内にはバックアップ・ファイルはありません.
         ____ ___
      :delete1
         echo ディレクトリ %1 内のバックアップ・ファイル
         echo を削除します.
         pause
 
         del %1\*.bak
 
         echo 終了しました.
         ____ ___
 
  :current
      __ _____ _____ ____ _______
      :else
         echo カレント・ディレクトリ内には
         echo バックアップ・ファイルはありません.
         ____ ___
      :delete2
         echo カレント・ディレクトリ内の
         echo バックアップ・ファイルを削除します.
         pause
 
         del *.bak
 
         echo 終了しました.
 
  :end

 
  問題3 man.bat のヒント

  : man.bat
  :    機能  コマンドのマニュアルを表示する
  :    書式  man コマンド名
  :
 
  @echo off
  cls
 
  __ "%1"=="" goto menu
  __ _____ b:\man\%1.man ____ proceed
 
  :else
      echo %1 は登録されていません.
      ____ ___
 
  :proceed
      ____ _____________ | ____
      ____ ___
 
  :menu
      echo 登録コマンド名
      echo:
      ___ b:\man\*.man
  :end

 
 SET コマンドについて 環境変数の値を設定するには,set コマンドを
使用する.
  

 

 set 環境変数名=文字列
 
環境変数の値をバッチファイル内で参照するには,%変数名% と記述する.たとえ
ば変数名 filename にファイル名 dir.man を設定するには,次のようにする.
    set filename=dir.man
そして filename に設定されたファイルの内容を表示するには,
    type %filename%
と記述する.
 
  問題4 help.bat のヒント
 
  :
  :        help.bat
  :
  :    Function : Display Command Manual ( Menu Mode )
  :    Usage  : help
  :
 
  @echo off
 
  :start
  cls
 
  echo *** Command Help ***
  echo.
  echo  CHDIR ..... 1
  echo  COPY ...... 2
  echo  DEL ....... 3
  echo  DIR ....... 4
  echo  FIND ...... 5
  echo  MKDIR ..... 6
  echo  MORE ...... 7
  echo  SORT ...... 8
  echo  TYPE ...... 9
  echo  end ....... 0
  echo.
  echo Enter :
  ______
 
  if errorlevel 9 goto help_type
  __ __________ _ ____ _________
  __ __________ _ ____ _________
  __ __________ _ ____ _________
  _ __________ _ ____ _________
  __ __________ _ ____ _________
  __ __________ _ ____ _________
  __ __________ _ ____ _________
  if errorlevel 1 goto help_chdir
  if errorlevel 0 goto end
 
  :help_chdir
      set filename=chdir.man
      goto display
  :help_copy
      set filename=copy.man
      goto display
  :help_del
      set filename=del.man
      goto display
  :help_dir
      set filename=dir.man
      goto display
  :help_find
      set filename=find.man
      goto display
  :help_mkdir
      set filename=mkdir.man
      goto display
  :help_more
      set filename=more.man
      goto display
  :help_sort
      set filename=sort.man
      goto display
  :help_type
      set filename=type.man
      goto display
 
  :display
      cls
      ____ b:____\%filename% | more
      echo:
      echo Hit Return ...
      pause > nul
      goto _____
 
  :end
      echo ..... done

 
2.7 for ループによる繰り返し
 
 バッチファイルで指定回数の繰り返しを行うには,for コマンドを使用する.
  

 

 for %%変数名 in (リスト) do コマンド
 
 例 Hello World という文字列を10回表示するバッチファイル hello.bat を
作成してみる.
 
    バッチファイル hello.bat
  
    :
    :        hello.bat
    :
 
    @echo off
    cls
 
    for %%x in (0 1 2 3 4 5 6 7 8 9) do echo %%x: Hello World

 
 例 for ループのリストに *.* を指定すると,現在のディレクトリ内のすべて
のファイル名を繰り返しのリストに登録することができる.このことを用いて現在
のディレクトリ内のファイル名だけをすべて表示する dirfile.bat を作成してみる.
 
    バッチファイル dirfile.bat
  
    :
    :        dirfile.bat
    :
    :    機能  : ファイル名だけを表示する
    :    使用法 : dirfile [directory]
    :
 
    @echo off
    cls
 
    if "%1"=="" goto current
 
    :else
        cd %1
 
    :current
        for %%x in (*.*) do echo %%x

 
【練習10】 現在のディレクトリと指定ディレクトリを比較し,同じ名前のファイ
 ルが存在するかどうかを調べるバッチファイル cmpdir.bat を作成せよ.
 
  バッチファイル cmpdir.bat

  :
  :      cmpdir.bat
  :
  :    機能  : 現在のディレクトリと指定ディレクトリの比較
  :    使用法 : cmpdir directory
  :
 
  @echo off
  cls
 
  if "%1"=="" goto error
 
  :compare
  echo ­­­­­ checking in %1 ­­­­­
    for %%x in (*.*) do if exist %1\%%x echo %%x exist
    for %%x in (*.*) do if not exist %1\%%x echo $e[31m%%x not exist
    echo.
    echo $e[37m.... completed
    goto end
 
  :error
    echo Usage : cmpdir directory
  :end

 
2.8 shift による繰り返し
 
 shift コマンドを1回実行すると,引数で与えられたパラメータ値の設定
が,一つずつ左にずれる.
  

 

 shift
 
 例 引数で与えた値を一つずつずらせながら表示する shiftpar.bat を作成す
る.例えば
 
      shiftpar 1 2 3 4 5 6 7 8 9 10 11 12
 
と入力すると以下のような実行結果が得られる.
 
      1 2 3 4 5 6 7 8 9
      2 3 4 5 6 7 8 9 10
      3 4 5 6 7 8 9 10 11
      4 5 6 7 8 9 10 11 12
      5 6 7 8 9 10 11 12
      6 7 8 9 10 11 12
      7 8 9 10 11 12
      8 9 10 11 12
      9 10 11 12
      10 11 12
      11 12
      12
 
    バッチフィル shiftpar.bat
  
    :
    :        shiftpar.bat
    :
 
    @echo off
    cls
 
    :start
        echo %1 %2 %3 %4 %5 %6 %7 %8 %9
        shift
        if not "%1"=="" goto start

 
【練習11】 複数のファイルを指定して,順に連続して画面に表示するバッチファ
 イル cat.bat を作成せよ.オプションとして /f ファイル名 を与えると,指
 定ファイルを順に連結した(concatenate)新規ファイル(/f で指定した名前
 の)を作成できるようにする.オプションとして /p を与えると,連結したファ
 イルを印刷できるようにする.
 
    バッチファイル cat.bat
  
    :
    :        cat.bat
    :
    :    function : concatenate files
    :    usage  : cat [/f newfile] file1 file2 ....
    :
 
    @echo off
    cls
 
    if "%1"=="/f" goto create
    if "%1"=="/F" goto create
    if "%1"=="/p" goto print
    if "%1"=="/P" goto print
 
    :display
        type %1 | more
        shift
        if "%1"=="" goto end
        goto display
 
    :create
        shift
        set newfile=%1
        if exist %newfile% goto error
    :create_loop
        shift
        if "%1"=="" goto end
        type %1 >> %newfile%
        goto create_loop
    :error
        echo ERROR : %newfile% already exist
        goto end
 
    :print
        shift
        if "%1"=="" goto end
        type %1 > prn
        goto print
 
    :end
        set newfile=

 
        3 パスの設定とフィルター処理
 
3.1 パスの設定
 
 現在アクセスしているディレクトリのことを,カレント・ディレクトリという.
外部コマンド・ファイルやバッチファイルが,カレント・ディレクトリにない場
合は,コマンド名あるいはファイル名を入力しただけでは実行できない.
 実行するには次の3方法がある.
 
 [1] chdir コマンドで目的のファイルが納められているディレクトリに移動する.
 [2] 目的のファイルまでのパス名(絶対パス,相対パス)を指定する.
 [3] 検索パスを設定しておく.
 
検索パスを設定するには次のコマンドを使用する.


 

 set path=パス名
 
 
【練習12】 検索パスを追加するバッチファイル addpath.bat を作成して,ルー
 ト・ディレクトリに保存しなさい.ただし,追加するパス名は以下の3つとする.
    b:\    b:\bat    b:\bin
 
    バッチファイル addpath.bat
  
    : addpath.bat
    :    機能  パス b:\;b:\bat;b:\bin を追加する
    :    書式  addpath
 
    echo off
    cls
 
    set path=%path%;b:\;b:\bat;b:\bin
 
    echo パスを追加しました.

 
3.2 フィルタ処理
 
 フィルタ処理とは,データをある種の「ふるい」にかける役割をはたす.標準
入力からデータを読み込み,処理した(ふるいにかけた)結果を標準出力に出力
するコマンドをフィルタという.
 MS-DOS には,3種類のフィルタがある.
 
    find ・・・・・・・ 指定された文字列の検索
    more ・・・・・・・ 一画面ごとの出力
    sort ・・・・・・・ 行単位でアルファベット順に並べ替え
 
【練習13】 課題3で作成したマニュアル参照用バッチファイル man.bat を用い
 て,コマンド find, more, sort のマニュアルを表示しなさい.
 
【練習14】 ディレクトリを man に移動してから次のコマンドを入力して,フィ
 ルタ処理の様子を確認しなさい.
  (1) type find.man
  (2) find "FIND" find.man
  (3) find /v "FIND" find.man
  (4) find /c "FIND" find.man
  (5) find /n "FIND" find.man
  (6) find /n "文字列" find.man
  (7) dir
  (8) dir > dir.dat
  (9) type dir.dat
 (10) sort < dir.dat
 (11) sort /r < dir.dat
 
【練習15】 次のコマンドを入力して,フィルタ処理の様子を確認しなさい.
  (1) dir b:\man
  (2) dir b:\man | sort
  (3) dir b:\man | sort | more
  (4) dir b:\
  (5) dir b:\ | find "DIR"
  (6) dir b:\ | find /c "DIR"
  (7) dir b:\ | find /v "DIR"
  (8) dir b:\man | sort | more
  (9) dir b:\man | find "-" | sort | more
 (10) dir b:\man | find "-" | sort /+16 | more
 (11) dir b:\man | find "-" | sort /+24 | more
 
 
            提出課題2
 
【問題5】 課題3で作成したマンド・マニュアル参照用バッチファイル man.bat
 で,man と入力すると次のように登録コマンド一覧が表示された.
 
    ドライブ B: のディスクのボリュームラベルは
    ディレクトリは B:\MAN
 
    GOTO   MAN   548 92-06-15 10:31
    DIR   MAN   932 92-06-04 17:21
    IF    MAN   651 92-06-15 10:35
    CLS   MAN   281 92-06-04 17:39
    TYPE   MAN   386 92-06-05 15:21
    CHKDSK  MAN   572 92-06-05 15:10
    MORE   MAN   649 92-06-05 15:34
    MKDIR  MAN   563 92-06-05 15:45
    CHDIR  MAN   682 92-06-06 15:26
    DEL   MAN   252 92-06-08 11:36
    COPY   MAN   791 92-06-08 11:30
    PAUSE  MAN   563 92-06-15 10:38
    SORT   MAN   551 92-11-12 13:43
    FIND   MAN   462 92-11-12 13:43
        14 個のファイルがあります
      616448 バイトが使用可能です
 
 そこで,次のように改良しなさい.
  ・ 不要な網掛け部分は表示しない.
  ・ コマンド名をアルファベット順に表示する.
 
【問題6】 オプション付きのディレクトリ表示用バッチファイル maydir.bat
 を作成しなさい.ただし,オプションは次のものを設定しなさい.
 
    /d  ディレクトリ名のみを表示
    /f  ファイル名のみを表示
    /n  ファイル名の順に表示
    /t  作成日時の順に表示
    /s  ファイル・サイズの順に表示
    /e  拡張子順に表示
 
            提出課題2のヒント
 
  問題6 mydir.bat のヒント

  :
  :    mydir.bat
  :    機能  オプション付きのディレクトリ表示
  :    書式  mydir [オプション]
  :    解説  オプションには次のものがある.
  :         /d  ディレクトリ名のみを表示
  :         /f  ファイル名のみを表示
  :         /n  ファイル名の順に表示
  :         /t  作成日時順に表示
  :         /s  ファイル・サイズ順に表示
  :         /e  拡張子順に表示
  :
 
  @echo off
  cls
 
  if "%1"=="" goto all
 
  if "%1"=="/D"  goto directory
  if "%1"=="/d"  goto directory
 
  if "%1"=="/F"  goto file
  if "%1"=="/f"  goto file
 
  if "%1"=="/N"  goto name
  if "%1"=="/n"  goto name
 
  if "%1"=="/T"  goto time
  if "%1"=="/t"  goto time
 
  if "%1"=="/S"  goto size
  if "%1"=="/s"  goto size
 
  if "%1"=="/E"  goto extension
  if "%1"=="/e"  goto extension
 
  :default
      echo オプションの指定が違います.
      echo   /D  ディレクトリ名のみを表示
      echo   /F  ファイル名のみを表示
      echo   /N  ファイル名の順に表示
      echo   /T  作成日時順に表示
      echo   /S  ファイル・サイズ順に表示
      echo   /E  拡張子順に表示
      goto end
 
  :all
      ___ | ____ ___ | ____ __ ___ | ____
      goto end
 
  :directory
      ___ | ____ _______ | ____
      goto end
 
  :file
      ___ | ____ ___ | ____ __ _______ | ____
      goto end
 
  :name
      ___ | ____ ___ | ____ | ____
      goto end
 
  :time
      ___ | ____ ___ | ____ ____ | ____
      goto end
 
  :size
      ___ | ____ ___ | ____ ____ | ____
      goto end
 
  :extension
      ___ | ____ ___ | ____ ____ | ____
      goto end
 
  :end

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        MS−DOS コマンドマニュアル
 
 chdir.man の内容

 chdir      (内部コマンド)
 
 機能 カレント・ディレクトリを別のディレクトリに変更する.現在,設定さ
    れているカレント・ディレクトリを表示する.
 
 書式  chdir [ドライブ名][パス名]
     cd [ドライブ名][パス名]
 
 解説 カレント・ドライブのディレクトリに変更するには
        chdir パス名
    カレント・ドライブ以外のディレクトリに変更するには
        chdir ドライブ名パス名
    現在のカレント・ディレクトリを表示するには
        chdir
 
     カレント・ディレクトリを別のディレクトリに変更するには2つの
    指定方法がある.ひとつは,ルート・ディレクトリからのパス名を指
    定する方法(絶対指定)と,もうひとつは,カレント・ディレクトリ
    からのパス名を指定する方法(相対指定)である.

 
 chkdsk.man の内容

 chkdsk     (外部コマンド)
 
 機能 指定されたドライブのディレクトリ状況を調べ,ファイルおよびディス
    クの状態を表示する.
 
 書式 chkdsk [ドライブ名] [ファイル名] [/F] [/V]
 
 解説 ディスクのチェックを行うには
        chkdsk ドライブ名
    特定のファイルのチェックを行うには
        chkdsk ドライブ名 ファイル名
 
    オプション・スイッチ
    /f  ディスクにエラーが発見されたとき,ディスクの自動修復を行う.
    /v  ディスクの使用状況の他に,ディレクトリの状況も表示する.
 
    (注意) chkdsk コマンドでは,ディスクの物理的な破壊はチェックで
        きない.

 
 cls.man の内容

 cls        (内部コマンド)
 
 機能 画面の表示を消去します.
 
 書式 cls
 
 解説  cls コマンドは,画面に ANSI エスケープ・シークエンス ESC[2J
    (画面を消去するコード)を出力します.
     このコードが送られると,画面の文字がすべて消去され,カーソル
    が画面の左上端に移動します.

 
 copy.man の内容

 copy       (内部コマンド)
 
 機能 ファイルのコピーを作成する.
 
 書式 copy ファイル1 ファイル2
 
 解説  ファイル1 を ファイル2 にコピーします.コピー先に, 既に同
    名のファイルがある場合は,それまでのファイルの内容は,上書きさ
    れる.
     第2パラメータ(ファイル2)の指定について
    (1) 省略したとき
        カレント・ディレクトリに,第1パラメータで指定したファ
       イルと同じ名前でコピーする.
    (2) パス名を指定したとき
        指定したパスのディレクトリに第1パラメータで指定したファ
       イルと同じ名前でコピーする.
 
 例  ファイル repo01.txt をコピーして,ディレクトリ \repo 内にファイ
    ル report1.txt を作成する.
        copy repo01.txt \repo\report1.txt
 
    ファイル bunsyo1.txt を,ディレクトリ \repo 内に名前を変えないで
    コピーする.
        copy bunsyo1.txt \repo

 
 del.man の内容

 del        (内部コマンド)
 
 機能 指定したファイルを削除する.
 
 書式 del [ドライブ名]ファイル名
 
 解説 ファイルを削除するには
        del ファイル名
    特定のディレクトリにある全てのファイルを削除するには
        del [パス名]\*.*
    または
        del パス名

 
 dir.man の内容

 dir        (内部コマンド)
 
 機能 指定したディレクトリとファイルに関する情報を表示する.
 
 書式 dir [ドライブ名] [ファイル名] [/P] [/W]
 
 解説 カレントドライブのカレントディレクトリを表示する.
        dir
    特定ドライブのカレントディレクトリを表示する.
        dir ドライブ名
    特定ディレクトリを表示する.
        dir ディレクトリ名
    特定ファイルを表示する.
        dir ファイル名
     表示する情報は,ファイル名(ディレクトリ名),ファイルの大きさ(バ
    イト単位),最後に編集された日付と時刻の3種類である.
     ファイル名の指定には,ワイルドカード( * , ? )が使える.
 
    オプション・スイッチ
    /p  1画面分の情報を表示すると,いったん表示を停止する.任意の
       キーを押すと残りの情報を再開する.
    /w  ファイル名だけを1行に5つずつ表示する.
 
 例  (1) ドライブBのルート・ディレクトリの内容を表示する.
        dir b:\
    (2) カレント・ディレクトリにあるファイルから,拡張子が .bas のも
     のを表示する.
        dir *.bas

 
 find.man の内容

  find   (外部コマンド)
 
  機能  ファイルから指定した文字列をさがす.
 
  書式  find [/V] [/C] [/N] "文字列" ファイル名
 
  解説   指定したファイルから,指定した文字列を含む行をすべて表示す
     る.文字列は,ダブル・クォート " で囲む.
 
      オプション・スイッチ
     /v  指定した文字列を含まないすべての行を表示
     /c  指定した文字列を含む行数だけを表示
     /n  行の前に相対的な行番号を表示

 
 goto.man の内容

 goto       (バッチファイル用内部コマンド)
 
 機能 バッチファイルでの処理の流れをラベルで定義されている位置に移す.
 
 書式 goto ラベル
 
 解説  goto コマンドは,ラベル の定義されている行へ実行を移す.ラベル
    が定義されていない場合は,バッチファイルの実行を終了する.
     ラベルは,行の先頭にコロン : を記述することにより定義され,コ
    ロンに続く8文字がラベル名となる.
     この行は,ラベルとして機能するだけで,処理の際には無視される.
    したがって,バッチファイルの中のコメント行としても使用できる.

 
 if.man の内容

 if     (バッチファイル用内部コマンド)
 
 機能 条件判断に応じてバッチ処理を行う.
 
 書式 if [not] 条件 コマンド
 
 解説  if コマンドは,条件 に応じてコマンドを実行する.おもに goto コ
    マンドを用いてバッチ処理の分岐に使用する.
     条件が真であればコマンドを実行し,偽であれば次の行に処理が移る.
    not を指定した場合は,条件の真偽が逆になる.
 
    条件の指定の仕方について
    (1) 文字列1 == 文字列2
       文字列1 と 文字列2が等しいときに真になる.文字列には,バッ
      チ処理のパラメータ(引数)を使用することができる.
    (2) exit ファイル名
       ファイル名で指定したファイルが存在する場合は真になる.

 
 mkdir.man の内容

 mkdir      (内部コマンド)
 
 機能 新しいディレクトリを作成する.
 
 書式  mkdir [ドライブ名]パス名
     md [ドライブ名]パス名
 
 解説  新しい階層ディレクトリ構造を作成する.パス名は,ルート・ディレ
    クトリから始まるものであっても,新しく作成するディレクトリ名のみ
    であってもよい.ディレクトリ名のみの場合は,カレント・ディレクト
    リの下に,サブ・ディレクトリが作成される.
 
 例  ルート・ディレクトリにサブ・ディレクトリ user を作成する.
        mkdir \user
    user の下に joe というサブ・ディレクトリを作成する.
        mkdir \user\joe

 
 more.man の内容

 more       (外部コマンド)
 
 機能 標準出力への出力を1画面ごとに区切って表示する.
 
 書式 more
 
 解説  more コマンドはフィルタの一つで,標準入力装置(通常キーボード)
    から読み込み,一度に一画分(23行)の情報を標準出力装置(通常ディ
    スプレイ)へ出力する.
     1回の動作で,まだ出力が残っている場合は画面の最下位行に,
        --MORE--
    と表示する.次の1画面を表示するには,スペースキーなどを押す.こ
    れは more への入力データが終わるまで繰り返される.
     表示を中止するときは,CTRL キーを押しながら C キーを押す.
 
 例  ファイル myfile.txt を1画面ずつ表示する.
        type myfile.txt | more
    または,
        more < myfile.txt

 
 pause.man の内容

 pause      (バッチファイル用内部コマンド)
 
 機能 バッチ処理の実行を一時停止する.
 
 書式 pause [コメント]
 
 解説  バッチ処理実行中,ディスクを交換するなど処理を一時停止させる
    必要が生じた場合に使用する.pause コマンドが実行されると,
        準備ができたらどれかキーを押して下さい.
    と表示し,キー入力待ち状態になる.何かキーを押すと,次のコマンド
    が実行される.
     コメントは,pause と同じ行に指定します.このコメントは pause
    コマンドの実行時にコマンドと同じ行に表示されます.したがって,
    ECHO OFF の状態では表示されません.

 
 sort.man の内容

 sort    (外部コマンド)
 
 機能  標準入力からデータを読み込み,そのデータを行単位でソート(並
    び替え)して標準出力に出力する.
 
 書式  sort [/R] [/+n] < ファイル名
 
 解説  入力は,リダイレクトまたはパイプを用いる.
 
     オプション・スイッチは
     /R  逆順ソート,すなわち Z から A の順にソートする.
     /+n  n は数値を入力し,n 桁目からの文字を並べ替えの対象とする.
        指定しない場合は1桁目からが並べ替えの対象となる.

 
 type.man の内容

 type       (内部コマンド)
 
 機能  ファイルの内容をディスプレイに表示する.
 
 書式  type ファイル名
 
 解説  type コマンドはファイルの内容を表示するのみで,内容の変更はでき
    ない.
     type コマンドは,タブコードを,8桁ごとのタブ位置への空白に展開
    する.それ以外には書式の指定などを行わない.
     バイナリ形式 のファイルを表示させると,正しい表示は行われない.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
            課題解答例
 
 問題2の解答例

 : dbak.bat
 :   機能  バックアップ・ファイルを削除します.
 :   書式  dbak [パス名]
 :       パス名を省略すると,カレント・ディレクトリ内の
 :       バックアップ・ファイルを削除する.
 
 @echo off
 cls
 
 if "%1"=="" goto current
 
 :else
     if exist %1\*.bak goto delete1
     :else
         echo %1 内にはバックアップ・ファイルはありません.
         goto end
     :delete1
         echo ディレクトリ %1 内のバックアップ・ファイル
         echo を削除します.
         pause
 
         del %1\*.bak
 
         echo 終了しました.
         goto end
 
 :current
     if exist *.bak goto delete2
     :else
         echo カレント・ディレクトリ内には
         echo バックアップ・ファイルはありません.
         goto end
     :delete2
         echo カレント・ディレクトリ内の
         echo バックアップ・ファイルを削除します.
         pause
 
         del *.bak
 
         echo 終了しました.
 
 :end

 
 問題5の解答例

 :
 :   man.bat
 :   機能  コマンドのマニュアルを表示する
 :   書式  man コマンド名
 :
 
 @echo off
 cls
 
 if "%1"=="" goto menu
 if exist b:\man\%1.man goto proceed
 
 :else
     echo %1 は登録されていません.
     goto end
 
 :proceed
     type b:\man\%1.man | more
     goto end
 
 :menu
     echo 登録コマンド名
     echo:
     dir b:\man\*.man | find "­" | sort
 :end

 
 問題6の解答例

 :
 :    mydir.bat
 :    機能  オプション付きのディレクトリ表示
 :    書式  mydir [オプション]
 :    解説  オプションには次のものがある.
 :         /D ディレクトリ名のみを表示
 :         /F ファイル名のみを表示
 :         /N  ファイル名の順に表示
 :         /T 作成日時順に表示
 :         /S  ファイル・サイズ順に表示
 :         /E  拡張子順に表示
 :
 
 @echo off
 cls
 
 if "%1"==""   goto all
 
 if "%1"=="/D"  goto directory
 if "%1"=="/d"  goto directory
 
 if "%1"=="/F"  goto file
 if "%1"=="/f"  goto file
 
 if "%1"=="/N"  goto name
 if "%1"=="/n"  goto name
 
 if "%1"=="/T"  goto time
 if "%1"=="/t"  goto time
 
 if "%1"=="/S"  goto size
 if "%1"=="/s"  goto size
 
 if "%1"=="/E"  goto extension
 if "%1"=="/e"  goto extension
 
 
 :default
     echo オプションの指定が違います.
     echo   /D ディレクトリ名のみを表示
     echo   /F ファイル名のみを表示
     echo   /N  ファイル名の順に表示
     echo   /T 作成日時順に表示
     echo   /S  ファイル・サイズ順に表示
     echo   /E  拡張子順に表示
     goto end
 
 :all
     dir | find "­" | find /n "­" | more
     goto end
 
 :directory
     dir | find "<DIR>" | more
     goto end
 
 :file
     dir | find "­" | find /v "<DIR>" | more
     goto end
 
 :name
     dir | find "­" | sort | more
     goto end
 
 :time
     dir | find "­" | sort /+24 | more
     goto end
 
 :size
     dir | find "­" | sort /+16 | more
     goto end
 
 :extension
     dir | find "­" | sort /+10 | more
     goto end
 
 :end