MS-DOSコマンド・Batchファイル メモ

  • []
MS-DOS
コマンド(キーボードからの命令)によるプログラムの実行環境です。
WindowsのGUI環境の普及によってあまり使用することはなくなりましたが、
繰り返し行うことや、予め決めておいたことを自動で実行するのに便利です。


Batch
バッチファイル
MS-DOSのコマンドをテキストで記述し、拡張子 bat で保存すると、
コマンドの自動実行ファイルを作成できます。



■ディレクトリ(フォルダ)・ファイルの階層構造
Windowsでいう フォルダ は、MS-DOSで ディレクトリ にあたります。

C:\ディレクトリ\ディレクトリ\ファイル

C: ドライブを表す。
通常、C:が基本のハードディスク、A:がフロッピードライブとなっています。

\ 階層構造の区切り

. 現在の階層を表す

.. 現在の階層から一つ上の階層を表す

日本語や、スペースを含んだファイル・ディレクトリ名は扱いに工夫が要ります。
その場合、「" "」で囲んで指定します。

dir photo\"バリ旅行の時の写真"\"ウブドの市場"\"犬 ニワトリ.jpg"

または

dir "photo\バリ旅行の時の写真\ウブドの市場\犬 ニワトリ.jpg"

ファイル・ディレクトリ名は半角英文字と「 _ 」のみで表記しておくと扱いやすいです。



■コマンド
大まかな法則として「[何をするか ([オプション])] [対象の指定] [結果の指定]」
という構造になっています。
コマンドは半角の英文字で行います。コマンドとコマンドの間はスペースで区切ります。
大文字・小文字の区別は行われません。分かりやすいように記述してください。


CD
チェンジディレクトリ。現在のディレクトリから移動

cd newfolder\docment


DIR
ディレクトリ内を表示する。
/B ファイル、フォルダ名のみで表示する。
/P 数が多くてスクロールする場合、1ページごとに一時停止して表示する。
/A 指定した属性のファイルを表示する。
 属性:
 D ディレクトリ    R 読み取り専用    H 隠しファイル
 S システムファイル  A アーカイブ     - その属性以外

/O ファイルを並べ替えて表示する。
 並べ順:
 N 名前順       S サイズ順      E 拡張子順
 D 日付順       G ディレクトリ優先  - 逆順

dir /b /a-d-h /os
ファイル名のみで、ディレクトリと隠しファイルを除き、サイズ順で表示。


COPY
ファイルをコピーする。

COPY [移動元] [移動先]
初めに対象のファイルを指定し、後に保存先と保存ファイル名を指定する。
後の保存ファイル名を変えると、別名で保存ができる。

copy new.txt ..\newdoc\new.txt


MOVE
ファイルを移動する。
/Y ファイル移動の際の確認メッセージを表示しない。(NT×)

move new.txt ..\newdoc\new.txt
後の保存ファイル名を変えると、別名にして移動ができる。


MKDIR
メイクディレクトリ。ディレクトリを作成する。

mkdir nfolder


/?
ヘルプ
コマンドの後にこのオプションをつけて実行すると、
そのコマンドについてヘルプが表示されます。
すべてにヘルプが設定されているわけではありません。
分からなくなったときに試してみましょう。

dir /?


■Batch関連のコマンド


コマンドの先頭につけると、そのコマンドを画面に表示せずに実行する。

@echo off


CALL
別のバッチ、プログラムを実行し、また元のバッチに戻って実行を再開する。

call rename.bat /N


ECHO
メッセージを表示。半角・全角スペースより後の文字を表示します。

echo 処理中...


ECHO.
空白行を表示。


ECHO OFF
実行されるコマンドを表示しない。普通、最初に指定しておく。
表示されるのは ECHO で指定したメッセージと一部のコマンドだけになる。
@ECHO OFF を指定すると、ECHO OFF のコマンド自体も表示しない。


REM
コメントを指定
コマンドの説明等を書いておくと、後から編集するときに分かりやすい。
ECHO OFFを指定していると、コメントはバッチ実行中に表示されない。

rem コンバートの開始

(次の行を1行開けて改行しておく必用があるみたいです。)


PAUSE
ポーズ。処理を一時停止させ、キー入力を待つ。
このときBreakキー(Ctrl+Pause、またはCtrl+C)を押すと、
処理を中断するかどうかの確認メッセージを出し、
Y を入力すると中断させることができる。
pause >nul としておけば、キー入力を待つ旨のメッセージを表示しない。


IF
条件を判断して「条件通りならば」その後に記述されているコマンドを実行する。

IF [NOT] 文字列1==文字列2 コマンド
IF [NOT] EXIST ファイル名 コマンド

 NOT        条件の前に付けると「条件通りでなければ」という判断になる。
 文字列1==文字列2 文字列が一致すればコマンドを実行。
          「"%1"==""」とすれば、引数指定の有無が判断できる。
 EXIST ファイル名 指定されたファイルが実際に存在すればコマンドを実行。

if "%1"=="/n" dir
引数1が/NならばDIRを実行

if "%1"=="" goto ERR
引数が指定されていなければ、ラベル ERR に行く

if exist *.txt del *.bak
ファイル *.txt があれば *.bak を削除する

if exist nfolder\nul del *.bak
ディレクトリ nfolder があれば *.bak を削除する

引数など、空になる可能性のある文字列を一致条件に使うときは
両方の文字列を「" "」で囲んでおいた方が良い。

if %1==/n goto NO
上記の場合、引数が空だと、

if ==/n goto NO
このように文字列1の指定が無くなり、構文エラーとなる場合がある。


GOTO
ラベル(:ラベル名)を指定し、そのラベルの箇所に行く。
ラベル名は英数8文字まで。

goto MESSAGE
echo 飛ばされた命令は実行されません。
:MESSAGE
echo ラベルに飛び、その次の行から命令を実行します。


%1 ~ %9
引数。バッチファイルを起動するときに
バッチファイル [引数1] [引数2] ... というように指定しておくと、
実行時、%1 というように記述している部分にその文字列が参照される。
%0 にはそのコマンド自体が参照される。

backup.bat *.bat back

echo %0 が指定されました。
echo %1 を %2 にバックアップします。
copy %1 %2\bak_%1


SET
変数名をセット(定義)する。
SET の後、なにも指定しないと、現在定義されている変数を表示する。

SET 変数名=文字列
%変数名%

変数名(%変数名%)を記述している部分がセットした文字列に置き換えられる。
変数名に数字は使用できないので注意。(SET 0123=文字列 ×)
パラメータの指定がなければ、現在の環境変数が表示される。

set AISATU=おはようございます。
echo %AISATU%

変数には、あらかじめWindowsが定義している「環境変数」がある。
%TEMP% C:\windows\TEMP
%WINDIR% C:\WINDOWS , C:\WINNT (NT)
%OS% Windows_NT (NT)

Windows98系、NT系など、OSによって差がある。

定義された変数は、定義をセットしたコマンドプロンプトを終了させるまでは有効になっているようです。
call コマンドによって呼び出されたバッチやプログラムにも定義された変数が受け継がれます。
同コマンドプロンプトで続けてバッチを起動する場合は、変数をリセットしておかなければならない場合があります。

set AISATU=



■補助的なコマンド

*
ワイルドカード複数。任意の文字(0文字も含む)に対応。
(ワイルドカード)
何にでも当てはめることのできる文字。トランプでのJokerにあたる。

dir a*b*.*
a で始まりその後に b があるファイル名で、すべての拡張子のファイルを表示。

?
ワイルドカード単数。任意の1文字に対応。

dir ???????.t*
7文字のファイル名で、拡張子の最初に t の付くファイルを表示。


> , >> , <
リダイレクト。出力先・入力先にファイルを指定する。

>  出力先へ書き出す。(前データがあれば上書きされる)
>> 出力先へ追加書き出しする。(前データに追加される)
<  入力先からデータを受け取る。

find "rem" <list1.txt >list2.txt
rem という文字列のある行を list1.txt から選び出し、list2.txt に出力する。


NUL
NULL。存在することになっている、本当は存在しないもの。
メッセージ表示が起こるコマンドの後に > nul とNULLに受け渡すと、
ないものに受け渡されたことになり、メッセージは表示されない。


|
パイプ。コマンドの出力を、次に記述したコマンドへの入力とする。

dir | find "S"
ディレクトリ内表示される文字列の1行に S が含まれている行を検索して表示する。


COMMAND.COM 又は COMMAND
MS-DOSプロンプトの実行環境の設定を行う。

COMMAND [[ドライブ:]パス] [デバイス] [/E:nnnnn] [/L:nnnn] [/U:nnn] [/P] [/MSG]
    [/LOW] [/Y [/[C|K] コマンド]]

 /E:nnnnn 環境変数領域の初期サイズを nnnnn バイトで設定する。
      (nnnnn は 256 から 32768 まで)
 /L:nnnn  内部バッファのサイズを指定する。(/P スイッチと共に使う)
      (nnnn は 128 から 1,024 まで)
 /U:nnn  入力バッファサイズを指定する。(/P スイッチと共に使う)
      (nnn は 128 から 255 まで)
 /P    新しいコマンド インタープリタを常駐させる。(終了できない)
 /MSG   メモリ内にすべてのエラーメッセージを記憶する。(/P スイッチと共に使う)
 /LOW   COMMAND の常駐データを下位メモリに読み込む。
 /Y    /C か /K でバッチファイルを実行したときに 1 行ずつ確認する。
 /C    指定されたコマンドを実行し、戻る。
 /K    指定されたコマンドを実行し、そのまま戻らない。

command.com e/:32768 /c
環境変数領域の初期サイズを32768にし、戻る。