BAT:フォルダ内のファイル名を取得する方法

フォルダ内のファイル名を取得する方法をご紹介します。まずは.batファイルをクリックして取得する方法と.batファイルへ対象ファイルをドラッグしたらファイル名を取得する方法です。

.batファイルをクリックして取得

現在のフォルダに.batを置き下記のスクリプトを実行すると.batを選択しただけでファイル名/フォルダ名を取得することができます。

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
for /f %%i in ('dir /b /a "%cd%"') do (
    echo %%i
)
pause

まずfor /fを使い('dir /b /a "%cd%"')の処理の結果を一行ずつ読み取り%%iの変数へ渡してくれます。

('dir /b /a "%cd%"')は丸カッコ内にシングルクォーテーションで囲んであげるとコマンドが実行できるようになります。

/bは名前だけを取得。

/aはすべてのファイル/フォルダ/隠しファイルを抽出してくれます。もし隠しファイルやフォルダだけにしたい場合は下記のオプションを使用してください。

オプション詳細
dir /b /a-dファイルだけ
dir /b /adフォルダーだけ

"%cd%"と記述することで対象が現在のディレクトリになります。""で囲むことでファイル名などに空白があっても一つの区切りとして行を抽出してくれるのでエラーになることはなくなります。

.batファイルへドラッグして取得

今度は特定のファイル/フォルダだけを.batにドラックして特定のファイル/フォルダー名だけを取得したい場合です。こちらのほうが柔軟な使い方ができるので便利かと思います。

for %%N in (%*) do (
    echo %%~nxN
)

%*は渡されたすべての引数を取得することができます。今回はドラッグされたファイルのフルパスが格納されています。echo %%Nとするとフルパスが取得されていることが確認できるかと思います。

オプションをしていすることで、%%~nxNnはファイル/フォルダ名。xは拡張子をつける。となり、拡張子付きのファイル名が取得することができます。