バッチファイルを書くときに、バッチファイルが実行されている現在のディレクトリ(カレントディレクトリ)のパスを取得する方法がわかると、便利なことが多いです。
この記事では、バッチファイルでカレントディレクトリの絶対パスを取得する方法を紹介します。
カレントディレクトリの取得方法
%CD% 環境変数を使用すると、カレントディレクトリのフルパス(絶対パス)を取得できます。
たとえば、以下のバッチファイルを実行すると、echo コマンドがカレントディレクトリのパスを表示して確認することができます。
@echo off
echo Current directory is: %CD%
pause
%CD%を使用するメリット
バッチファイル内で %CD% を使用する主なメリットは、バッチファイルが別の場所に移動されたとしても、その内容を変更せずに正常に動作する可能性が向上することです。たとえば、バッチファイル内で使用するコマンドがファイルのフルパスを要求する場合において %CD% は非常に役に立ちます。
rem フルパスを要求するコマンド
CommandRequiresFullPath %CD%
上記のように書いてあれば、カレントディレクトリが山田さんのディレクトリ(D:\user\Yamada) であっても、伊藤さんのディレクトリ(D:\user\Ito)であっても、バッチファイルの修正をすること無く正しく動作します。
逆に、%CD%を使用せず、バッチファイル内にパスを直書きしている場合は、ファイルのフルパスを要求するコマンドへのパラメータであるフルパスは、それぞれ以下のように修正が必要です。
CommandRequiresFullPath D:\user\Yamada\log.txt
CommandRequiresFullPath D:\user\Ito\log.txt
サンプルコード:cdコマンドで移動した先のパスを記憶
以下のサンプルコードは、cdコマンドでカレントディレクトリを別のディレクトリに移動して、そのディレクトリのフルパスを変数に格納して表示します。
@echo off
rem ひとつ目のディレクトリに移動してフルパスを記憶
cd aaa
set PATH1=%CD%
rem ふたつ目のディレクトリに移動してフルパスを記憶
cd ..\bbb
set PATH2=%CD%
rem 表示
echo PATH1 is: %PATH1%
echo PATH2 is: %PATH2%
pause
実行結果1:D:\work\sample で実行した場合
PATH1 is: D:\work\sample\aaa
PATH2 is: D:\work\sample\bbb
続行するには何かキーを押してください . . .
実行結果2:R:\work で実行した場合
PATH1 is: R:\work\aaa
PATH2 is: R:\work\bbb
続行するには何かキーを押してください . . .
まとめ
カレントディレクトリのパスを取得し利用することは、バッチファイルの可搬性を高めるために非常に重要です。バッチファイルに限らずプログラミングにおいては、将来のメンテナンス性を考慮できるようになると良いと思います。