2012-10-30 137 views
3

我一直在努力使用来自for循环中要求的其他问题之一的技术来获取文件的父目录。我已经得到它的大部分工作,除了我认为,因为我的脚本已经接受了1个参数,这是为了运行多个文件位置所需要的,我需要保留它。我的getparentdir goto需要一些操作参数的方法。我必须在同一个父目录下为多个目录的文件做这件事。任何帮助将是惊人的。批量覆盖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! 

    ) 
) 

回答

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循环需要的相同刚刚意识到。突然清晰。

+0

也许你很清楚,但它看起来并不正确。 ParentDir将包含在“F:\ Falcon \ Inbound \%1”中找到的文件夹的名称。它不会给父文件夹,(至少从我的角度来看)。 – dbenham

1

我找不出你想要做什么。但是我在你的问题中看到了许多问题。

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

2)您有CALL跟随GOTO。当然,CALL不能执行,因为GOTO会绕过它。这可能也是一样。

3)您尝试在FOR循环中转到GOTO。这将立即打破循环,逻辑将很可能不是你想要的 - 循环永远不会处理超过1个PDF文件。此外,您正试图在加括号的DO代码块中GOTO一个标签。一般来说,你不应该把标签放在代码块中。有关IF语句块代码的类似问题的讨论,请参见(Windows batch) Goto within if block behaves very strangely

+0

谢谢!我对批处理有点新,但仍然在学习语法和语言规则。这对于未来的项目肯定有帮助。我试图得到父目录的名字,它正盯着我。 – user1783992