2012-10-30 45 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