【问题标题】:Creating a list of files within a BAT file [duplicate]在 BAT 文件中创建文件列表 [重复]
【发布时间】:2012-08-17 20:49:34
【问题描述】:
可能重复:
Batch file - Write list of files to variable
在一个批处理文件中,我试图创建一个目录及其子文件夹中所有 PDF 文件的列表,并使用 set 将此信息存储在一个变量中。
例如,如果 parentDirectory 本身及其子文件夹包含 1.pdf、2.pdf、 和 3.pdf:
cd parentDirectory
设置 pdfList =
-用于填充列表的代码在此处-
现在 pdfList 包含“1.pdf 2.pdf 3.pdf”
任何帮助将不胜感激。
【问题讨论】:
标签:
list
variables
batch-file
set
【解决方案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 文件名,请将 for 语句中的 dir 命令更改为:
dir /s /b *.pdf
但是使用它会产生副作用,即绝对路径列表将被添加到 pdfList 变量中,而不是您在问题中表达的相对路径。
第一个if 语句确保我们仅在存在PDF 文件时才执行dir 命令。如果它们不存在,我们不想调用 DIR 命令;否则dir 将打印“找不到文件”错误。
:append 子例程是必要的,因为如果我们尝试在 for 语句本身中附加到 pdfList 变量,我们会发现 pdfList 在一次迭代中的更新值不会持续到下一次迭代。
:append 子例程中的if 语句是为了确保我们在pdfList 的值中没有前导空格。