2014-12-03 69 views
0

我似乎无法找到答案,我怎么能内部循环中使用外循环的迭代器(在一个批处理文件):如何使用外部for循环的迭代器进行延迟扩展?

setlocal enabledelayedexpansion 
REM for every folder in %mainfolder% 
for /D %%s in (%mainfolder%\*) DO (
REM for every file in the subfolder %s 
    for %%f in (%%s\*) do(
     some things with the files in that subfolder 
    ) 
) 

我在哪里必须把感叹号,让我实际上可以在内循环中使用%s?现在,我得到的错误

“做(” 卡恩syntaktisch nicht的dieser颗星verarbeitet werden C:在\ fakepath>为%F(%S *)做(

这意味着翻译是“做(”不能在这个位置语法处理。

我敢肯定,这个问题实际上已经做的延迟扩展(实际上,与不使用它)

+2

您错过了'do'和左括号之间的空格。在内部循环中使用'%% s',....使用它。不需要延迟扩展 – 2014-12-03 18:29:27

+0

哦,哇,我没有看到这个我自己!非常感谢你的快速答案。你认为我应该删除这个问题,因为它的愚蠢? – lucidbrot 2014-12-03 18:32:17

+2

*“我没有失败,我刚刚发现了10000种不起作用的方法。”* Thomas A. Edison。没有愚蠢的问题。 – 2014-12-03 19:22:09

回答

1

要纠正错误,有必要在do子句和代码块的左括号之间添加一个空格。

%%s可替换的参数范围/可见性位于for循环的任何位置,用于初始化它。所以,它可以直接在内部循环中使用。