改訂
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ライナーで
%~
構文を適用。