コマンドの記述ルール


基本的なコマンドの記述ルールを紹介していきます。


コマンドは『オプション』や『引数』を指定できる

コマンドの処理に対して機能を付加できるのが『オプション』で、 コマンドの処理対象を指定するのが『引数』です。

オプション

各コマンドによって設定できる機能が異なり、オプションの無いコマンドもあります。 オプションを付加することにより、目的に応じた結果を取得することができます。

引数

コマンドによって設定できる場合とできない場合があります。 基本的に効果対象が単体に限定されるコマンドは引数の設定ができない、 というか対象を指定する必要が無いので設定も必要ありませんね。


コマンドの記述方法

記述方法は基本的に以下の4種類に分類されます。

  1. コマンド オプション 引数
  2. コマンド オプション 引数1 引数2 引数3 ・・・・・・
  3. コマンド オプション
  4. コマンドのみ

また引数についてはワイルドカードを使用することができます。 ワイルドカードの詳細は左メニューにて。


コマンドは基本的に半角小文字で

コマンドは全て半角で記述する必要があります。 半角であれば大文字小文字は問われませんのでお好みで選んで問題ありませが、 必ず小文字で入力しないとならないものもあるので半角小文字で統一する方が良いでしょう。

全て半角小文字で記述しておけば半角大文字が有効で無いコマンドを気にする必要が無いので、 大文字小文字に関する人為的な(勘違い)ミスを1つ無くすことができます。

当コンテンツも小文字で統一することにします。

またコマンドと引数、オプションの間は半角空白で区切りましょう。 区切らずに記述しても正しいコマンドとして認識されるケースもありますが、 それは稀なケースですので基本的に半角空白で区切るように統一することを推奨します。

これでさらに人為的(勘違い)ミスを減らすことができますね。


""(ダブルクォーテーション)で囲め!!

引数に全角文字が混じる場合や半角空白を含む場合は、""(ダブルクォーテーション)で囲まないといけません。 特に半角文字の中に半角空白が混じっていると囲み忘れが発生しやすいです。

例えばコマンドの対象に「test sample」というディレクトリを指定したい時に"test sample" と指定するのは正しいですが、test sampleと指定するのは誤りです。

何故駄目なのでしょう?

理由は簡単です。引数は複数指定することができるからです。 つまり"test sample"は""で囲んでいるのでtest sampleという一つのディレクトリとして解釈されますが、 test sampleはtestというディレクトリとsampleというディレクトリの二つの引数として解釈されてしまいます。

何気にハマりやすいので気をつけましょう。


実際の流れを見てみよう

なんで""で囲まないといけないか。「理由はこうこうこうだから。こうなるんだよ!」なんて文字で書かれても理解しにくいでしょう。そこで""で囲った場合と囲まなかった場合の動作の違いを見てみることにします。

サンプルの構成(出力表記)

C:\programing\cmd>tree /f  ←ツリー表示のコマンド
フォルダ パスの一覧
ボリューム シリアル番号は 71EFE346 9858:6120 です
C:.
├─sample
│      sample001.php
│
├─test
│      sample002.php
│
└─test sample
        sample003.php


C:\programing\cmd>

サンプルの構成(文章表記)

  • sampleディレクトリにsample001.php
  • testディレクトリにsample002.php
  • test sampleディレクトリにsample003.php

サンプルに示した構成でみていきます。 目的はtest sampleディレクトリのsample003.phpファイルを削除することとします。

まず""で囲んだ場合。

C:\programing\cmd>del /q "test sample"

C:\programing\cmd>tree /f  ←ツリー表示のコマンド
フォルダ パスの一覧
ボリューム シリアル番号は 71EFE346 9858:6120 です
C:.
├─sample
│      sample001.php
│
├─test
│      sample002.php
│
└─test sample

C:\programing\cmd>

ちゃんと""で囲むとtest sampleディレクトリのsample003.phpファイルを削除することができました。


次に""で囲まなかった場合。

C:\programing\cmd>del /q test sample

C:\programing\cmd>tree /f  ←ツリー表示のコマンド
フォルダ パスの一覧
ボリューム シリアル番号は 71EFE346 9858:6120 です
C:.
├─sample
├─test
└─test sample
        sample003.php

C:\programing\cmd>

あれま、""で囲まなかったらtest sampleディレクトリ内のファイルじゃなくtestディレクトリ内とsampleディレクトリ内のファイルが削除されてしまいました。何故でしょう?

コマンドの中には引数を複数設定できるものがあり、引数どうしを区分けする記号が半角空白なのです。""で囲った範囲のものは1つの引数とみなされ範囲中の半角空白も文字列として扱われる為、引数は1つと認識されます。

""で囲わなかった場合は半角空白で引数が区切られるので引数は2つと認識されます。ということは""で囲まないで実行したdelコマンドはtestディレクトリとsampleディレクトリを対象にしてしまい、予定に無かったsample001.phpとsample002.phpを削除してしまったというわけです。

さらに困ったことにdelコマンドで削除したファイルはゴミ箱を経由せず削除されてしまいます。たとえsample001.phpとsample002.phpが大事な大事なファイルだったとしてもコマンドで削除してしまうと基本的に復活させることができません。後の祭りです。

因みにcdコマンドのように引数を1つしか指定できないものでは""で囲まなくても""で囲った時と同等の効果を持つ。

""で囲まなくてもtest sampleに移動できる

C:\programing\cmd>cd test sample

C:\programing\cmd\test sample>

このようにコマンドによって引数の扱いが変わるので注意するようにしましょう。


まとめ+α

まとめ

  • コマンドは(オプションも)半角小文字で記述する
  • コマンド、オプション、引数間は半角空白で区切る
  • 半角空白を含む引数は""で囲む

+α

  • 誰にでも見やすい汎用性のあるコードで記述しよう
  • 正しい記述ルールはエラーの発生を低くする
  • 汎用性の高いコードはエラーの特定が容易である

この辺りに気をつけて自分なりのルールを作ってみよう。