将批处理脚本中变量中的文件夹内的所有文件名连接起来

将批处理脚本中变量中的文件夹内的所有文件名连接起来

我正在尝试创建一个文件列表作为参数传递给程序,但是遇到了问题。

我希望的输出应该是:file1.jpg, file2.bmp, file3.docx

我尝试使用的球棒是这样的:

SETLOCAL EnableDelayedExpansion
cd /D %~dp0
set _filelist=
for /f "delims=|" %%f in ('dir /b %CD%') do (
  set "_filelist=%_filelist%,%%f"
)
echo %_filelist%
pause

但它只输出列表中的最后一个文件:,lastfile.xyz

我做错了什么?

答案1

好像你只是忘了使用感叹号(“ !”)与您在循环内设置的变量,并解决简单地使用!_filelist!而不是%_filelist%

下面的脚本将set _filelist=,使用单个逗号值设置初始变量,因此第一次迭代将是,,第一个迭代值,而不是空值加一个逗号,您将得到两个背靠背的逗号,从而为解析提供一个唯一的模式。

您可以使用变量替换功能用于解析出双逗号(,,),并将其替换为空白值。然后,将从循环外部解析最终迭代和设置的变量值,并set _filelist=%_filelist:,,=%删除双逗号前缀值。

脚本

SETLOCAL EnableDelayedExpansion
cd /D %~dp0
set _filelist=,
for /f "delims=|" %%f in ('dir /b %CD%') do (
  set "_filelist=!_filelist!,%%f"
)
set _filelist=%_filelist:,,=%
echo %_filelist%
pause

延迟扩展将导致批处理文件中的变量在执行时而不是在解析时扩展,此选项通过 SETLOCAL EnableDelayedExpansion 命令打开。 [1]


当延迟扩展生效时,可以使用 !variable_name! 立即读取变量,您还可以读取和使用将显示初始值(在行首扩展)的 %variable_name%。 [1]


更多资源

相关内容