【Batch】引数で渡されたファイルとディレクトリの中に含まれるファイルのフルパスを全て取得する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Batch】引数で渡されたファイルとディレクトリの中に含まれるファイルのフルパスを全て取得する

2022-1-28 |

Batchに引数で渡されたファイルとディレクトリの中に含まれるファイルのフルパスを全て取得したい!

概要

Bacthを使って引数で渡されたファイルとディレクトリの中に含まれるファイルのフルパスを全て取得する例を示す。

仕様書

batファイルにファイルやディレクトリをドラッグ・アンド・ドロップするとディレクトリの中にある全てのファイルを含む全てのファイルのフルパスを出力する。
サブディレクトリの中のファイルも含む。
引数で渡されたファイルやディレクトリ以外の文字列は無視される。

環境

  • Windows 10 Home Version 21H1(OS ビルド 19043.1415)

手順書

下記は、引数で渡されたファイルとディレクトリの中に含まれるファイルのフルパスを全て出力するサンプルです。

@echo off

:loop

if "%~1" == "" goto end

set attr=%~a1

if exist %~1 (
    if %attr:~0,1%==d (
        for /r %~1 %%f in (*) do (
            call:test1 "%%f"
        )
    ) else if %attr:~0,1%==- call:test1 "%~1"
)

shift
goto loop

:end

pause

exit /b

:test1

echo %1

exit /b

解説

if exist %~1で引数が存在してるパスであるか判定する。
if %attr:~0,1%==dで引数がディレクトリであるか判定する。ディレクトリであればforで再帰的に処理をする。
call:test1 "%%f"test1サブルーチンへファイルのフルパスを渡す。
else if %attr:~0,1%==-で引数がファイルであるか判定する。ファイルであれば、ディレクトリの場合と同様にcall:test1 "%%f"test1サブルーチンへファイルのフルパスを渡す。

:test1とその下にあるexit /bの間に行いたい処理を入力する。

まとめ(感想文)

全てもれなく処理すべし。