1

可能重复:
批处理文件 - 将文件列表写入变量

在批处理文件中,我试图创建目录及其子文件夹中所有 PDF 文件的列表,并使用set将此信息存储在变量中。

例如,如果parentDirectory本身及其子文件夹包含1.pdf、2.pdf3.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变量中,而不是您在问题中表达的相对路径。

第一条if语句确保我们dir仅在存在 PDF 文件时才执行命令。如果它们不存在,我们不想调用 DIR 命令;否则dir会打印“找不到文件”错误。

:append子例程是必要的,因为如果我们尝试pdfList在语句本身中附加到变量for,我们会发现pdfList在一次迭代中更新的值不会持续到下一次迭代。

子例程中的if语句:append是为了确保在 的值中没有前导空格pdfList

于 2012-08-17T21:21:06.960 回答