batファイルでファイル名を取得する方法が分かりません。実行しているファイルやカレントディレクトリにあるファイル名を取得したい!
batファイルでファイル名を取得する方法は様々あります。実行しているbatファイル名やカレントディレクトリにあるファイル名取得なども可能です。
今回はその方法を現役エンジニアの筆者が詳しく説明します!
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
batでファイル名を取得する様々な方法
ファイル名を取得する方法ですが2パターンあります。
- 実行しているbatファイル名を取得する
- カレントディレクトリのファイル名を取得する
このどちらも詳しく説明していきます。
実行しているbatファイル名を取得する簡単な方法
まずは実行しているbatファイル名を取得する方法です。
@echo off
echo %0
pause
注意点としてbatファイルを実行するパスにより%0に入る値が変化します。
- batファイルをダブルクリックして実行する場合
- batファイルが存在するパスまで移動して実行する場合
batファイルをダブルクリックして実行する場合
batファイルをダブルクリックすると、ユーザーのホームディレクトリから実行されるので%0に入るbatファイル名は絶対パスを含みます。
batファイルをダブルクリックした結果
"C:\script\bat\18_ファイル名取得\ファイル名取得.bat"
batファイルが存在するパスまで移動して実行する場合
batファイルのパスまで移動して実行する時は、%0にはbatファイル名のみ取得されます。
C:\script\bat\18_ファイル名取得>ファイル名取得.bat
ファイル名取得.bat
batファイルをダブルクリックしてファイル名のみ取得する方法
batファイルをダブルクリックして実行する人も多いと思います。その時にbatファイル名のみ取得する方法はないのでしょうか?
その時は「%~nx0」を指定すればbatファイル名のみ取得できます。
「%~n0」を使用したbatファイルを実行した結果、ファイル名のみ取得できています。
ファイル名取得.bat
その他にもbatファイルの様々な情報を取得できますので、簡単にまとめておきます。
オプション | 意味 |
---|---|
%~d0 | バッチファイルのドライブ名 |
%~p0 | バッチファイルのパス |
%~dp0 | バッチファイルのドライブ名+パス |
%~f0 | バッチファイル名を含めたパス |
%~n0 | バッチファイル名 |
%~x0 | バッチファイルの識別子 |
%~nx0 | バッチファイル名(識別子含む) |
%~s0 | バッチファイル名を含めたパス(省略形) |
%~a0 | バッチファイルの属性 |
%~t0 | バッチファイルの更新日時 |
%~z0 | バッチファイルの容量(バイト) |
カレントディレクトリのファイル名を取得する方法
カレントディレクトリにあるファイル名を取得したい場合もあるかと思います。
forを使用してファイル名を取得する方法です。
@echo off
for %%i in (*) do echo %%i
pause
for文の(*)はカレントディレクトリのファイル名全てが入ります。
フォルダ構成は以下としてbatファイルを実行してみます。
実行した結果は以下となりました。カレントディレクトリのみにあるファイル名を取得しています。
ファイル名取得.bat
ファイル1.txt
ファイル2.txt
続行するには何かキーを押してください . . .
またカレントディレクトリ配下のサブフォルダも対象にしたい場合は「/r」オプションを使用します。
@echo off
for /r %%i in (*) do echo %%i
pause
これでカレントディレクトリ配下のファイル名も取得できますので実行してみます。
C:\script\bat\18_ファイル名取得\ファイル名取得.bat
C:\script\bat\18_ファイル名取得\ファイル1.txt
C:\script\bat\18_ファイル名取得\ファイル2.txt
C:\script\bat\18_ファイル名取得\sub_dir\sub_file_1.txt
C:\script\bat\18_ファイル名取得\sub_dir\sub_file_2.txt
続行するには何かキーを押してください . . .
ファイル名を取得できました。
forで様々な情報を取得できるので詳しくは以下の記事を参考にしてください。
batファイルでファイル名取得できるようになったので、バッチファイルで出来る事が多くなりました!