2016-11-21 56 views
2

我寫一個批處理文件的完整路徑,我被困在搜索循環的中間:找到特定文件的與循環

FOR /R %MapDirectory% %%s IN ("%FullName%") DO SET DesiredMapFilePath=%%s 

我想要做的是找到一個文件的完整路徑由其所有子目錄中給定根目錄的文件給出。保證只有一個文件具有給定的名稱。

%MapDirectory%是根路徑(例如:%~dp0\some\directory\wanna\start\from)和%FullName%是我要找的文件的全名(例如:foo.txt)。

上述命令行未能找到實際存在於給定根路徑(%MapDirectory%)的子目錄中的給定文件。

+0

'for'('/ R')不訪問文件系統,除非有通配符,那麼最簡單的方法就是使用'DIR/B' ('/ S')並通過'for/F'解析其輸出... – aschipfl

+0

謝謝aschipfi!不知道/ r只適用於通配符。 – user58569

回答

1

與dir命令結合

FOR /F "tokens=*" %%s IN ('dir /b /s "%MapDirectory%\%FullName%"') DO (set DesiredMapFilePath=%%s) 
+0

感謝您的示例。我會用你的樣品tmr進行測試。 (生活在差異時區),但現在,一個好奇心,%MapDirectory%\%FullName%讓我奇怪,它看起來像搜索當前目錄中的文件,而不是它的子... – user58569

+0

/s在dir命令搜索子文件夾以及 – Richard

+0

它適合我!謝謝你的評論! – user58569

1

根據提供的信息,您可以使用Where命令。

For /F "Delims=" %%s In (
    'Where/R "%~dp0some\directory\wanna\start\from" "foo.txt"' 
) Do Set "DesiredMapFilePath=%%s" 

[編輯/]

where命令結構的上方和下方,如果你在你的起始目錄的斜槓不起作用。 (但你的問題沒有,我的答案也沒有)

For /F "Delims=" %%s In ('Where/R "%MapDirectory%" "foo.txt"' 
    ) Do Set "DesiredMapFilePath=%%s" 
+0

謝謝你的例子。將測試它tmr。我嘗試了prev中的關鍵字,但那次沒有任何效果。它也適用於win8嗎? – user58569

+0

Windows 8應該沒有任何理由不能正確運行此代碼。 – Compo

+0

我測試過你的示例代碼,但沒有爲我工作,它仍然沒有找到foo.txt從\從其子目錄出於某種原因。無論如何,上面的示例適合我,並感謝您的評論! – user58569