Vic*_*ico 5 windows batch command-line
我正在尝试创建一个文件列表以作为参数传递给程序,但我遇到了问题。
我想要的输出应该是: 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
Run Code Online (Sandbox Code Playgroud)
但它只输出列表中的最后一个文件: ,lastfile.xyz
我在做什么错?
似乎您只是忘记将感叹号(" !") 与您在循环中设置的变量一起使用,并解析为简单地使用!_filelist!而不是%_filelist%.
下面的脚本将set _filelist=,使用单个逗号值设置初始变量,因此第一次迭代将是,,第一个迭代值,而不是 null 加上一个逗号,您将得到两个背靠背的逗号,从而提供用于解析的唯一模式。
您可以使用变量替换功能来解析双逗号 ( ,,),并将它们替换为空白值。然后将从循环外部解析最终迭代和设置的变量值,并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
Run Code Online (Sandbox Code Playgroud)
Delayed Expansion 将导致批处理文件中的变量在执行时而不是在解析时扩展,此选项通过 SETLOCAL EnableDelayedExpansion 命令打开。 [1]
当延迟扩展生效时,可以使用 !variable_name! 立即读取变量!您还可以阅读和使用 %variable_name% 来显示初始值(在行的开头展开)。 [1]
| 归档时间: |
|
| 查看次数: |
4132 次 |
| 最近记录: |