使用for循环存储变量名称

时间:2015-10-29 06:10:49

标签: batch-file

我想获取c:\test内所有文件的列表。我的尝试是这样的:

set loc=c:\test

for /f %%i in(dir "%loc%" /b') do (

 @set variable=%%i

echo %variable%

)

...但我只回来了一个文件名,n次。如何获取该文件夹中的所有文件。

2 个答案:

答案 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!
)