【问题标题】:Batch script error: "%%d was not expected at this time"批处理脚本错误:“此时不需要 %%d”
【发布时间】:2012-08-18 12:41:25
【问题描述】:

您好,我正在尝试创建一个循环,该循环将遍历文件夹并获取它们的名称,并在每个文件夹中获取文件的名称。

开头是:

@echo off
setlocal enabledelayedexpansion
for /d %%d in (Folder*) do
    for %%f in ("%%d"\*.bla) do (
"command list"
)

我在一开始就有共鸣:

 %%d was unexpected at this time

我猜这与 setlocal 命令有关,有人知道吗?

【问题讨论】:

  • 在第一个 do 和相应的关闭后缺少 (

标签: for-loop batch-file


【解决方案1】:

我已经测试过下面的这个脚本可以工作。

@echo off
set parent=%1

echo Beginning from %parent%...
for /d %%G in ("%parent%"\*) do (
    echo Folder: "%%G"
    set child=%%G
    echo %child%
    for /r %child%\ %%H in (*.*) do (
        echo File: "%%H"
    )

)
pause.

以根路径为参数运行:myscript.bat C:\Windows

%%G 比其他字母更受欢迎,因为here。但这不是必需的。

正如我所见,for /r path %%H in (*.*) do () 是使用 for 处理文件的正确形式。你的脚本是错误的。您的脚本中一定有一些语法错误,请全部发布。

根据您的要求,这只深入一层:对于根目录下的所有目录,输入它并打印所有文件的名称。它不区分二级和更深层次下的目录。 goto 可以用来完善它。

【讨论】:

    【解决方案2】:

    它缺少两个括号。这是更正后的代码。

    @echo off
    setlocal enabledelayedexpansion
    for /d %%d in (Folder*) do (
        for %%f in ("%%d"\*.bla) do (
            rem "command list"
            echo %%f
        )
    )
    

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多