1

重複の可能性:
バッチ ファイル - ファイルのリストを変数に書き込む

バッチ ファイル内で、ディレクトリとそのサブフォルダー内のすべての PDF ファイルのリストを作成し、 setを使用してこの情報を変数に格納しようとしています。

たとえば、parentDirectory自体とそのサブフォルダーに1.pdf、2.pdf、および3.pdfが含まれている場合:

cd parentDirectory
set pdfList =
-リストを作成するためのコードがここに入ります- pdfList には"1.pdf 2.pdf 3.pdf"
が含まれます

どんな助けでも大歓迎です。

4

1 に答える 1

1
@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 つの反復で更新された値が次の反復まで存続しないことがわかるためです。forpdfList

サブルーチンのifステートメントは:append、 の値に先行スペースがないことを確認することですpdfList

于 2012-08-17T21:21:06.960 に答える