我正在尝试创建文件列表以作为参数传递给程序,但是我遇到了问题。
我想要的输出应该是: 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
我做错了什么?
似乎您只是忘记了将感叹号(“ !
”)与您在循环内设置的变量一起使用,!_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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句