2019年7月10日水曜日

Windowsコマンドプロンプト使うなら、最低限これだけは覚えるべし③:CD

<Windowsコマンドプロンプト使うなら、最低限これだけは覚えるべし③:CD>


 前回は「DIRについて記載しましたが、今回は共によく使う、というかこれをきちんと理解していないと意味がない「CD(CHDIR)」(チェンジディレクトリ)について書きます。
 この「CD」も単純に使ってしまえばそれだけで終わってしまいますが、きちんとマスターしておいた方が良い・便利な小技ありのコマンドの一つになります。

 <ポイント>

  • カレントディレクトリ(今いる場所)という概念
  • “絶対パス”と“相対パス”
  • 一つ上の階層、パスの区切り文字
  • ドライブは別(オプション/Dが必要)
  • スペース文字を含むパスはダブルクォート(”~~~”)で括る


カレントディレクトリ(今いる場所)という概念


 まず、コマンドプロンプトでは “今自分がどこにいるのか” をよくよく理解して操作しないと想定外の結果を生んでしまうことがあります。
 通常、プロンプト(コマンドプロンプトを起動した直後に表示される「C:\Users\~~~>」という文字列)に “今どこにいるか” は表示されます(設定で変更・非表示も可)。
 しかし本来であれば自分がどこにいるかはわかるはずもなく、エクスプローラのようにツリーで強調表示されるわけでもないので、明示的に「今どこにいるの?」を問い合わせるのがお行儀としては正しいです。
 問い合わせる方法として、「cd」だけで実行(通称空打ち)すると、
  今自分がいる場所(←カレントディレクトリ)
 を返してくれます。
 上記の場合、「C:ドライブ」の「Users」フォルダの下の「TestUser01」というフォルダの下にいる、という意味になります。プロンプト部にも同じ文字列が出ているので間抜けですが。。。


“絶対パス”と“相対パス”


 次に、パス(Path:階層の場所、住所~番地みたいなもの)の指し示し方として、通常は“絶対パス”を意識しがちですが、自然には“相対パス”が使われていることが多いため、その両方を説明します。

 絶対パス:

 最上位の場所~~~現在の場所までをすべて表したもの。
  例)
   (自分がどこにいようが)
   C:\Windows\Temp\Hoge.txt に対して云々

  他の例え)
   宇宙:\~~~\太陽系\地球\日本国\〇〇県\□□市\△△区\☆☆町\123\4\567\××さん

 相対パス:

 自分のいる場所から上記のHoge.txtをターゲットとした場合。
  例)
   (自分がC:\Windows\にいた場合)
   .\Temp\Hoge.txt
   Temp\Hoge.txt

   (自分がC:\Users\TestUser01\にいた場合)
   ..\..\Windows\Temp\Hoge.txt

   (自分がC:\Windows\Temp\にいた場合)
   .\Hoge.txt
   Hoge.txt


一つ上の階層、パスの区切り文字


 上の例で使っていますが、区切り文字には半角の「¥」を使います。
 英語フォントではバックスラッシュ「\」で表示されますが、同じ意味です。
 私の書いているこのブログではバックスラッシュになっちゃってますね。
 (Unix系OSは「/」で記述するので紛らわしいです。)

 一つ上の階層に移動や指し示す場合は、「..\」と、ドットを二つ重ねます。
 二つ上の場合は「..\..\」とつなげていく形で、いくつでもつなげて書きます。

 最後に「.\」という書き方があります。これは「今ここの」と明示的に指し示す場合に使います。
 上にも書きましたが今自分のいる場所にHoge.txtというファイルがあったとして、それを指示して何かしようとした場合、「.\Hoge.txt」と「Hoge.txt」は同じ意味になります。
 これは、ログオン/サインイン時のユーザー名でも同じです。
 じつはユーザー名の前にはコンピュータ名、またはドメイン名が付きます。
 指定しないでもログインできるのは、明示的に示していないだけで、暗黙で「このコンピュータ」という部分が省略・自動付与されていると考えてもらえればよいと思います。
 もし試してみる場合は、(ドメインユーザーでない場合は)ログオンユーザー名のところに、「.\(いつものユーザー名)」や、「(自分のコンピュータ名)\(いつものユーザー名)」でログインしてみてもらえればわかると思います。


ドライブは別(オプション/Dが必要)


Windowsでは「ドライブ」という概念が古くから存在しています。
 CDで指し示すことはできるのですが、カレント(今いる)という部分で一癖あります。
 「カレントドライブ」という概念があり、パスの中に含まれているようで含まれていないような少しわかりにくい部分でもあります。
 自分がC:ドライブのどこかにいたとして、「CD D:\Temp」と打って実行してもカレント表示は変わらないですし、「cd」空打ちしてもC:\~~~の元の場所のままです。
 これは、「CD」コマンドでは基本フォルダの移動酒でありドライブの移動はオプション「 /d」を付けてあげないとドライブの移動までは認識しない仕様になっているためです。
 ただし、D:のドライブ側では実際には移動されているため、各ドライブ毎にカレントフォルダが記憶されている動きになっています。
 そして、カレントドライブを移動する方法は、「d:」と打つだけで移動します。C:ドライブに戻りたいときは「c:」と打ちます。
 言葉・文字ではなかなか表現しにくい/わかりにくいと思いますので、実際に打ってみるとこうなります。
 どうですかね。。。
 コマンドプロンプトとしては、各ドライブごとにカレントのディレクトリ(フォルダ)位置情報を保持しているという考え方がしっくりくるかと思います。

 本題ですが、ドライブごと、“いっぺんに移動“するには、
  cd /d D:\Temp
 と実行すると、コマンドプロンプトのカレントドライブはD:に移動しつつ、フォルダも移動します。

スペース文字を含むパスはダブルクォート(”~~~”)で括る


 さて、長くなりましたが、本当に「CD」の最後にします。
 エクスプローラーなどで“半角スペース文字”を使ったフォルダやファイル名を付けることが出来ますが、結構嫌われます。その理由は、このコマンドプロンプトなどで操作するとすぐわかります。
 たとえば、半角スペースの入ったフォルダに「cd」を実行しようとした場合、“そんなフォルダねぇーぞ!ゴラァ!ぼけぇっ!”という事をやさし~く言われてしまいます。

 ・・・
 と思ったら、
 cd C:\Program Files」で移動できてしまったぁ!!
 ・・・衝撃です。
 今初めて知りました。移動できるんですね。。。
 いつからできるようになったのか、、、最近???昔から???知りませんでした。

 えっと、気を取り直して。
 本来は、ダブルクォートで括らないとだめです。はい。
 「cd "C:\Program Files"」が正しいです。
 ・・・
 いや、えっと、うんと、そうだ!!「dir」ならきっと。。。
 「dir C:\Program Files
 はい、怒られた。
 “ファイルが見つかりません”と、やさし~く言ってくれました。(よかったぁ)

 こういった場合、正しくは、
 「dir "C:\Program Files"
 とダブルクォーテーションでパス全体を括ってひと塊ですよ~と認識させてあげます。
 (そうしないと、オプションの区切り(引数)なのかわからないですからね。)
 で、括って実行すると、ずらずらっとDIRの結果として表示されます。

 嫌われる理由は、何かプログラムやパッチで処理させようとした時、「スペースを含んでいるかもしれない」と思うと、いちいちダブルクォートで括ってあげないといけないから、です。
 が、今のご時世、入っていることを当然と考えて作り手は必ずスペースを含む名前の処理をしていると思いますので、作り手と使い手の間では暗黙の了解ですね。


 という事で、思わぬ発見(あぶないあぶない、ちゃんと試しながら記事書いててよかった)もありましたが、「CD」とその他もろもろ関連事項でした。

- PDS PIS 研究所 室長 -

0 件のコメント:

コメントを投稿