おはようございます。こんにちは。こんばんは。
ミッド(@mid_v_lab)です
以前「パス」について記載したのですが、カレントディレクトリについてあまり説明してなかったなと思い、解説します。
カレントディレクトリについて理解すると、下記のようなメリットがあります。
- 自分がどのディレクトリにいるか分かる
- パスの概念を理解できる
- batなどを書く際の絶対パスと相対パスを使い分けできる
では、いってみましょう!
カレントディレクトリとは
カレントディレクトリは、「Current Directory」の言葉の通り、「現在の」+「ディレクトリ」で、今自分がいるディレクトリのことを「カレントディレクトリ」と呼びます。
ん?ちょっと何言っているか分からない?という、そこのあなた。
GUI(通常のマウス操作)でしか、パソコンを触ったことがないと、なんじゃらほい~って感じですが、PowerShellやコマンドプロンプトといったCUI(コマンドでの操作)を利用するとすぐわかります。
スタート>Windows管理ツールから、「コマンドプロンプト」を起動してみてください。
こんな怪しいウインドウが立ち上がります。(ユーザ名はマスクしています)
このコマンドプロンプトのいる場所が、「カレントディレクトリ」です。もっというと、コマンドプロンプト起動時は、「C:\Users\<ユーザ名>」がカレントディレクトリです。
※コマンドプロンプトは右上の「×」か「exit」と入力して、Enterすれば閉じれます。
絶対パス、相対パスとは
カレントディレクトリがなんとなく理解できたところで、「絶対パス」と「相対パス」についてご説明します。
まず絶対パスですが、対象のファイルまでの完全なパスのことです。例えば、デスクトップに「test.txt」というファイルがある場合、
このファイルまでの絶対パスは「C:\Users\<ユーザ名>\desktop\text.txt」となります。パスを全部記載するのが、絶対パスです。
相対パスは、自分のいるパス(カレントディレクトリ)からの相対的なパスを示すものです。絶対パス同様、デスクトップに「test.txt」というファイルがある場合、カレントディレクトリがデスクトップとすると、
このファイルまでの相対パスは「.\text.txt」となります。カレントディレクトリによってこのパスは変化します。
例えばデスクトップの上のユーザフォルダにいれば、相対パスは「.\desktop\text.txt」となります。
※「.」(ドット)はカレントディレクトリを示します。
余談ですが、下記のようなフォルダ構成の場合で、カレントディレクトリがtest2にいるとすると、「test.txt」までの相対パスは「..\test\test.txt」となります。
※「..」(ドットドット)はカレントディレクトリより一つ上のディレクトリを示します。
絶対パス・相対パス使い分け
全部絶対パスで良いじゃん!となるかもしれませんが、絶対パスで書くと良いことも悪いこともあります。
良いことは、パスまで全部書くので絶対にパスが通るということです。例えばWindowsで標準搭載されている先ほどのコマンドプロンプトやメモ帳といったパスは、Windowsの決まった場所にあるので、絶対パスで指定してあげれば間違いなく100%通ります。
逆に、決まった場所にないファイルを指定する場合は、絶対パスでは表記できないのです。
例えばがデスクトップフォルダ。これはログインするユーザ名によって、場所がまちまちです。「C:\Users\test1\desktop」だったり、「C:\Users\test2\desktop」だったりします。
そのため、ユーザにダウンロードして実行してもらうbatファイルがあり、そのbatファイルが同梱されている他のbatやファイルを参照する場合は、相対パスで書く必要があるということです。
ユーザがデスクトップに保存したとしたら、「C:\Users\test1\desktop\zikkousuru」のパスを事前に分からないので!(個別ユーザに送るなら決め打ちできると思いますけど!)
そのため、サーバなどに定例実行させるスクリプトやbatであれば、場所が事前に分かっているので「絶対パス」を使うことがオススメで、
ユーザ環境に配布して実行するなど、実行環境が不定の場合は相対パスを利用する必要があります。
サーバなどでも複数のサーバで動かす想定のスクリプトなら、相対パスなどで記載しておくと色々汎用性があります。(現在のbatが置かれているパスを取得するコマンドなどもあります)
いかがでしたでしょうか。カレントディレクトリは現在の場所!絶対パスは不変的で絶対に変わらないパス。相対パスは自分の場所によって変わるパス。くらいにざっくり覚えておけば良いと思います。
LinuxなどのCUIメインのOSを利用すると、このカレントディレクトリ・絶対パス・相対パスは嫌というほど使うので、触ってみるのが一番の理解になりますね。
ではでは