批处理文件 - 将文件列表写入变量

10
我想要获取所有文件(包括它们的绝对路径)并将它们用空格分隔存入一个变量中。我在这方面谷歌搜索似乎不太行,因为我一直遇到问题。 我有一个基础目录存储在%baseDir%中,并希望解析它的文件(不递归或包括子目录)。如我所提到的,这需要放入一个列表中。我想象中应该有一个很好的小快捷方式,但用for循环和连接也可以实现。 理想情况下,我会得到像这样的东西:
echo fileList

C:\file1.c C:\file2.c C:\file3.c
1个回答

18
很简单:
setlocal enabledelayedexpansion enableextensions
set LIST=
for %%x in (%baseDir%\*) do set LIST=!LIST! %%x
set LIST=%LIST:~1%

事实上,你可以在通过help set访问的set命令帮助文档中找到这个例子,其中还包括为什么天真的方法不起作用的解释。

要使用不同的文件集合(而不是所有文件),你可以轻松更改通配符:

for %%x in (%baseDir%\*.c) do set LIST=!LIST! %%x

@espais:这是一个非常普遍的问题;我想我已经回答过大约十几次了;-) - Joey
@ Johannes... 快速跟进一下... 将此代码片段限制为仅 *.c 类型的文件是否容易? - erik
1
当然可以:只需使用%baseDir%\*.c作为通配符。 - Joey
好的,注释格式问题又来了,耶。我已经将其编辑到答案中,现在没有缺失的反斜杠了。 - Joey
这个能否递归实现? - Viktor Sehr
@Viktor:看一下 help for,它会告诉你在 for 循环中使用 /r 开关来达到这个目的。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接