Chapter 06

ファイルパスをディレクトリ部分・ファイル名部分に分解する

hymkor
hymkor
2020.10.19に更新

FOR で仕様する %%I 変数、バッチファイルの引数の %0~%9 を参照するとき、次のようなオプション文字を付加することで、ファイルのパスと解釈した時のディレクトリ名やファイル名だけを取り出すことができます。

ディレクトリ部分を取り出す処理(dirname 相当)

%%~dpI とすると %%I のドライブ文字+ディレクトリ部分を抽出できます。

[c:tmp]
$ type dirname.cmd
@echo off
for %%I IN ( c:\path\to\file ) do set "DIRNAME=%%~dpI"
echo %DIRNAME%
[c:tmp]
$ dirname
c:\path\to\

ファイル名部分のみを取り出す処理(basename 相当)

同じ要領で、%%~dp のところを %%~nx(ファイル名+拡張子)か %%~n(拡張子のないファイル名)にすれば Ok です。

%~ の後の「英小文字」は変数の中身を加工する意味があるので、変数名自身は「英大文字」にしておくことが推奨されています。