【问题标题】:Batch how to end an for-loop properly批处理如何正确结束for循环
【发布时间】:2010-09-26 10:12:00
【问题描述】:

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

用于创建的脚本只包含两个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 层的问题,问题似乎出在使用的命令外壳上,如果使用裸 cmd.exe,它可以工作,使用 Visual Studio 2008 命令外壳它不起作用,如上所述。

无论如何,谢谢。

【问题讨论】:

  • 您是从另一个脚本调用此脚本,还是将此代码复制/粘贴到另一个脚本中?您能否提供更多详细信息。
  • 从您提供的输出来看,您的文本编辑器中的换行符(在“@echo off”和“for /L...”之间)看起来不正确。你用什么来编辑批处理文件?
  • 我使用notepad++编辑文件。看起来很奇怪,c&p 到另一个文件有效,但只有一次,然后,使用新的 cmd shell 再次失败。

标签: batch-file for-loop cmd


【解决方案1】:

我不明白如何在答案下方添加一点评论,所以我就在这里做吧。

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

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

【讨论】:

    【解决方案2】:

    我认为您不需要括号前面的“@”或 for 循环体中的“&&”;括号负责处理 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
    

    【讨论】:

    • “@”不是针刺,但如果我删除了“&&”,它也不起作用。
    • 嗯。你用什么来编辑脚本?正如伯恩哈德在他的评论中提到的那样,这里有些奇怪。您只需要所有命令的“&&”都在同一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2019-05-05
    • 1970-01-01
    • 2011-05-19
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多