@echo off
setlocal
cd ..
if exist *.pdf(
for /f "tokens=*" %%a in ('dir /b *.pdf') do call :append %%a
)
echo pdfList: %pdfList%
goto :eof
:append
if defined pdfList (
set pdfList=%pdfList% %1
) else (
set pdfList=%1
)
これにより、スペースで区切られた PDF ファイル名のリストがpdfList
変数に追加されます。すべてのサブディレクトリにも PDF ファイル名を含めたい場合は、ステートメントdir
内のコマンドを次のように変更します。for
dir /s /b *.pdf
pdfList
ただし、これを使用すると、質問で表現した相対パスではなく、絶対パスのリストが変数に追加されるという副作用があります。
最初のステートメントは、PDF ファイルが存在する場合にのみコマンドif
を実行することを保証します。dir
それらが存在しない場合、DIR コマンドを呼び出したくありません。そうしないdir
と、「ファイルが見つかりません」というエラーが出力されます。
:append
サブルーチンが必要なのは、ステートメント自体でpdfList
変数に追加しようとすると、1 つの反復で更新された値が次の反復まで存続しないことがわかるためです。for
pdfList
サブルーチンのif
ステートメントは:append
、 の値に先行スペースがないことを確認することですpdfList
。