Windows バッチファイルで格納先フォルダ名を取得


改訂

2018-08-13 call文の代わりにfor文の1ライナーで %~ 構文を適用し、実質2行に洗練。

まえがき

Windows バッチファイルってすでに過去の遺物にも思えるが、まだまだ使われてることも多い。でも、ちょっと凝ったことをしようとすると %~dp0 とか書くことになり、手こずったりもする。

■ 課題

%~ 形式の バッチパラメータのオプション構文 はそこそこ揃っているのだが、%~dp0 でバッチファイルの格納先パスは取得できても、格納先フォルダ名を取得する方法は用意されていない。

取得したい情報 構文 値の例
バッチファイルのフルパス %~f0 C:\Users\someone\folder\mybatch.bat
バッチファイルの格納先パス %~dp0 C:\Users\someone\folder\
バッチファイルの格納先フォルダ名 なし folder

そこで、バッチファイル内でバッチファイルの格納先フォルダ名を取得する方法を実装してみた。

■ バッチファイルでの実装

@echo off

rem このバッチファイルが格納されているフォルダ名を取得する方法

setlocal
set THIS_PATH=%~dp0
for %%1 in ("%THIS_PATH:~0,-1%") do set FOLDER_NAME=%%~nx1

rem テストコード

echo.
echo Current directory is "%CD%"
echo Full path is "%~f0"
echo %%~dp0 is "%~dp0"
echo.
echo Folder name is "%FOLDER_NAME%"

説明
* 上記の例では %FOLDER_NAME% にバッチファイルの格納先フォルダ名がセットされる。
* ポイントはパス末尾の \ の有無で %~nx1 の結果が変わること。
* フォルダ名に空白文字やピリオドが含まれている場合にも対応。

改良
* call文の代わりに、for文を応用した1ライナーで %~ 構文を適用。

■ 参考