Windowsバッチ(*.bat)でカレントディレクトリのファイルパスを取得する方法をまとめたので、ここにメモしておきます。
カレントディレクトリとは「実行ファイルが存在するディレクトリ」のことで、Windowsバッチなら実行対象のバッチファイル(*.bat)が置かれているフォルダのことを意味しています。
カレントディレクトリを取得する
カレントディレクトリを取得する方法はいくつか存在し、どの方法もとても簡単に取得することが可能です。
C:\sample\bat\folder\CurrentDirectory1.bat
@echo off
rem カレントディレクトリの取得
rem 取得方法①
echo %%CD%%: %CD%
echo ==================
rem 取得方法②
echo %%~dp0: %~dp0
echo ----
echo %%0: %0
echo %%~0: %~0
echo %%~p0: %~p0
echo %%~d0: %~d0
pause >nul
結果
%CD%: C:\sample\bat\folder
==================
%~dp0: C:\sample\bat\folder\
----
%0: "C:\sample\bat\folder\CurrentDirectory1.bat"
%~0: C:\sample\bat\folder\CurrentDirectory1.bat
%~p0: \sample\bat\folder\
%~d0: C:
「%CD%」と「%~dp0」の2つの方法で取得することが可能です。両者の違いとしては、「%~dp0」の方は最後に「\」が付くくらいで、後は全く同じです。
「%CD%」は現在いるファイルパス+ファイル名を文字列として保持している環境変数です。
「%~dp0」を細かく分解すると以下の通りになります。
- 「%0」:ダブルクォーテーションに囲まれた形でカレントディレクトリ+ファイル名を取得
- 「%~0」:「~」を入れることで、最初と最後のダブルクォーテーションを削除
- 「%~p0」:ドライブ名とファイル名と抜いたファイルパスを取得
- 「%~0d」:ドライブ名のみ取得
カレントディレクトリを変数に代入する
カレントディレクトリを変数に代入する際は、通常の値を代入する時と同じ方法で行います。
C:\sample\bat\folder\CurrentDirectory2.bat
@echo off
rem 代入①
set CURRENT_DIRECTORY1=%CD%
set CURRENT_DIRECTORY2=%~dp0
echo %%CD%%: %CURRENT_DIRECTORY1%
echo %%~dp0: %CURRENT_DIRECTORY2%
echo ==================
rem 代入②
for /f "usebackq" %%i in (`CD`) do (echo %%i)
pause >nul
結果
%CD%: C:\sample\bat\folder
%~dp0: C:\sample\bat\folder\
==================
C:\sample\bat\folder
For文を使って、CDコマンドからカレントディレクトリを取得する方法もあります。(サンプル、代入②)
以上です。