在批处理中覆盖一个goto的脚本参数



我一直在努力使用来自for for for for for for for for for for for for for for for for for for for for for for for for for for for For。除了我认为,由于我的脚本已经输入1个参数,因此我已经将其工作在大多数情况下工作,这是为了为多个文件位置运行所需的参数,所以我需要保留它。我的getparentdir goto需要某种方式来操纵参数。我必须在同一父目录中为多个目录的文件执行此操作。任何帮助都会很棒。

当我运行它时,它似乎更喜欢脚本的参数,而不是发送到GOTO的内容,因此什么都没完成。

setlocal ENABLEDELAYEDEXPANSION
for /D %%f in (F:FalconInbound%1*) do (
    for %%g in ("%%f*.PDF") do (
      set ParentDir="%%g"
      echo !ParentDir!
      set ParentDir=%ParentDir: =:%
      set ParentDir=%ParentDir:= %

      :getparentdir
      if "%~1" EQU "" goto :cont
      Set ParentDir=%~1
      shift
      goto :getparentdir
      call :getparentdir

      :cont 
      set ParentDir=%ParentDir::= %
      echo ParentDir is !ParentDir!
    )
)

我无法弄清楚您要做什么。但是我在您的问题中看到了代码的许多问题。

1)您将parentdir设置在do()块中,并正确使用延迟扩展以回荡刚刚设置的值。但是后来,在同一代码中,您错误地将其恢复为正常扩展,以执行搜索和替换。您需要在整个代码块中使用延迟扩展。例如:
set ParentDir=!ParentDir: =:!

2)您的电话以下是goto。当然,呼叫永远无法执行,因为goto绕过它。那可能也一样。

3)您试图在循环范围内获得。这将立即打破循环,逻辑很可能不是您想要的 - 循环永远不会处理超过1 pdf文件。另外,您正在尝试在括号内的代码块中获得标签。通常,您不应将标签放在代码块中。请参阅(Windows batch)在内部的goto,如果块的行为非常奇怪,以讨论与代码语句块的类似问题的讨论。

刚刚实现的话,如果您只给循环的外部值

   for /D %%f in (F:FalconInbound%1*) do (
      SET ParentDir = %%~nf
      for %%g in ("%%f*.PDF") do (
         rem - Do Code here
      )
   )

在需要循环的需要中可以使用。突然清晰。

最新更新