我想获取c:\test
内所有文件的列表。我的尝试是这样的:
set loc=c:\test
for /f %%i in(dir "%loc%" /b') do (
@set variable=%%i
echo %variable%
)
...但我只回来了一个文件名,n次。如何获取该文件夹中的所有文件。
答案 0 :(得分:0)
您需要启用"delayed expansion"才能生效。如果未启用,则在解析脚本时,仅对变量进行一次计算。这就是为什么你得到一个文件名n次。
一些注意事项:
SETLOCAL EnableDelayedExpansion
!
代替%
作为变量分隔符,以便%variable%
成为!variable!
%%i
这样的循环变量是一个例外,因为即使未启用延迟扩展,它们也会更改其值。在原始脚本中尝试ECHO
%%i
(即没有SETLOCAL EnableDelayedExpansion
),看看我的意思编辑: dark fang正确地指出了您的脚本中的语法错误,我甚至没有抓到 - 但是根据您描述的行为,当您使用时,这些错误不在您的脚本中尝试运行它,因为它只会出错。
最后你会得到:
SETLOCAL EnableDelayedExpansion
set loc=c:\test
for /f %%i in ('dir "%loc%" /b') do (
@set variable=%%i
echo !variable!
)
答案 1 :(得分:0)
1。您一直只返回1个文件名的原因是您没有Setlocal EnableDelayedExpansion
。
2。再次检查您的代码,您没有在dir "%loc%" /b'
之前添加单个引号。
3。再次检查您的代码,您不能坚持“在”和“(”如in(
,这绝对会破坏您的代码。
@echo off
Setlocal EnableDelayedExpansion
set "loc=c:\test"
for /f %%i in ('dir "%loc%" /b') do (
set "variable=%%i"
echo !variable!
)