2

我一直在努力使用来自 for 循环中提出的其他问题之一的技术来获取文件的父目录。我已经让它大部分工作了,除了我认为因为我的脚本已经接受了 1 个参数,这是为多个文件位置运行所需的,我需要保留它。我的 getparentdir goto 需要某种方式来操作参数。我必须为同一个父目录中的多个目录文件执行此操作。任何帮助都会很棒。

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

setlocal ENABLEDELAYEDEXPANSION

for /D %%f in (F:\Falcon\Inbound\%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!

    )
)
4

2 回答 2

1

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

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

2) 你有 CALL 跟随 GOTO。当然,CALL 永远无法执行,因为 GOTO 会绕过它。这可能也是如此。

3) 您尝试在 FOR 循环中转到 GOTO。这将立即中断循环,并且逻辑很可能不是您想要的 - 循环永远不会处理超过 1 个 PDF 文件。此外,您正在尝试 GOTO 带括号的 DO 代码块中的标签。通常,您不应将标签放在代码块中。有关 IF 语句代码块的类似问题的讨论,请参阅(Windows 批处理)Goto inside if block 的行为非常奇怪

于 2012-10-30T16:38:02.373 回答
0

刚刚意识到如果你只是给外部 for 循环一个值

   for /D %%f in (F:\Falcon\Inbound\%1\*) do (

      SET ParentDir = %%~nf

      for %%g in ("%%f\*.PDF") do (

         rem - Do Code here
      )
   )

在需要 for 循环时,这将同样有效。突然清晰。

于 2012-10-30T13:33:27.933 回答