Windowsコマンドでファイル名だけ/パスだけ取得する
linuxには文字列を渡すとファイル名だけ返すコマンド(basename)とパスだけ返すコマンド(dirname)がある。
例えばこんな感じだ。
basename /test/hoge/fuga.csv [結果] fuga.csv
dirname /test/hoge/fuga.csv [結果] /test/hoge/
しかしながら、windowsにはそんな便利な一発コマンドがない・・・のだが、バッチパラメータの置換を利用して、似たようなことはできるようになっている。
下記のようなバッチファイルを作成してみる。
[basename.bat]
@echo off echo %~nx1
[dirname.bat]
@echo off echo %~dp1
それぞれの実行結果は下記の通り。
C:\>basename.bat C:\testhoge\fugafuga.csv fugafuga.csv
ファイル名だけ取れてる。
C:\>basename.bat C:\testhoge\fugafuga.csv C:\testhoge\
パスだけ取れてる。
他にも、ドライブ名だけ取得する、拡張子だけ取る、等も可能。詳細はcallコマンドのヘルプを参照するといい。下記callコマンドのhelpより引用。
バッチ パラメーター (%n) の置換は拡張されました。次のオプション構文 を使うことができます: %~1 - すべての引用句 (") を削除して、%1 を展開します。 %~f1 - %1 を完全修飾パス名に展開します。 %~d1 - %1 をドライブ文字だけに展開します。 %~p1 - %1 をパスだけに展開します。 %~n1 - %1 をファイル名だけに展開します。 %~x1 - %1 をファイル拡張子だけに展開します。 %~s1 - 展開されたパスは、短い名前だけを含みます。 %~a1 - %1 をファイル属性に展開します。 %~t1 - %1 をファイルの日付/時刻に展開します。 %~z1 - %1 をファイルのサイズに展開します。 %~$PATH:1 - PATH 環境変数に指定されているディレクトリを検索し、 最初に見つかった完全修飾名に %1 を展開します。 環境変数名が定義されていない場合、または 検索してもファイルが見つからなかった場合は、 この修飾子を指定すると空の文字列に展開されます。 修飾子を組み合わせて、複合結果を得ることもできます: %~dp1 - %1 をドライブ文字とパスだけに展開します。 %~nx1 - %1 をファイル名と拡張子だけに展開します。 %~dp$PATH:1 - PATH 環境変数に指定されているディレクトリを 検索して %1 を探し、最初に見つかったファイル のドライブ文字とパスだけに展開します。 %~ftza1 - %1 を DIR の出力行のように展開します。