我正在尝试创建一个文件列表作为参数传递给程序,但是遇到了问题。
我希望的输出应该是: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]
更多资源
- 启用延迟扩展 [1]