我一直在努力使用来自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
)
)
在需要循环的需要中可以使用。突然清晰。