批处理如何正确结束for循环

时间:2008-12-11 12:06:06

标签: batch-file for-loop cmd

出于测试目的,我需要一个包含一些文件的递归目录,这些文件具有最大路径长度。

用于创建的脚本仅包含两个for循环,如下所示:

for /L %%a in (1 1 255) do @(
    mkdir %%a
    && cd %%a
    && for /L %%b in (1 1 %random%) do @(
            echo %%b >> %%a.txt
        )
)

现在我想将这个脚本作为另一个脚本的一部分嵌入,因为要做更多的事情,但是我不能在它周围添加任何其他命令或它拒绝工作。我在windows vista下使用它,如果这对你有用。

如果我在第一行写"@ECHO OFF“,也不在最后一行写”echo done“,也不行。

命令行上的

输出是:

X:\Scripte>recursive.cmd
OFFfor /L %a in (1 1 255) do @( mkdir %a
The system cannot find the path specified.

编辑: 似乎是第8层的问题,问题似乎是在使用的命令shell中,如果使用裸cmd.exe,它的工作原理,与visual studio 2008命令shell一样,它不起作用,如上所述。

无论如何,谢谢。

2 个答案:

答案 0 :(得分:2)

我不明白如何在答案下面添加一些评论,所以我会在这里做。

仅当echo尚未关闭时,才需要在左括号前面的@符号。在这种情况下,没有@符号会发生的事情是FOR循环中的每个命令都会被回显。

而且,是的,需要&&和是文本编辑器将它全部放在一行上。但没有人发布解决方案。只需复制并粘贴到记事本中,然后根据需要分隔行。

答案 1 :(得分:1)

我认为你不需要在parens或'&&&'前面的'@'在for循环体内; parens负责处理for循环中的多个语句。

以下适用于我:

@echo OFF

for /L %%a in (1 1 255) do (
    @echo a = %%a
    mkdir %%a
    cd %%a
    for /L %%b in (1 1 %random%) do (
        echo %%b >> %%a.txt
    )
)

@echo done