2012-10-22 70 views
2

我目前面臨的,我需要在每一個子目錄進程文件問題的正確子目錄,我使用了一個for循環像這樣的:獲取批處理腳本的輸出與/ R標誌

for /R %%x in (*.dat) do tool.exe -c -f -e "%%x" 

現在它處理所有內容,但工具會輸出一個文件,並且該文件始終位於啓動批處理腳本的目錄中,而不是位於原始文件所在的目錄中。 我嘗試了很多方法,例如使用%CD%作爲工具的輸出目錄選項,但它看起來像該工具不太喜歡那樣,只是給出了錯誤。

我正在尋找一個通用的解決方案,因爲我現在有很多CLI工具都有這個問題。

回答

2

你可以CD到當前.dat在於調用tool.exe之前所在的目錄:

for /R %%x in (*.dat) do (cd "%%~dpx" & tool.exe -c -f -e "%%x") 
+0

非常感謝!正是我在尋找的東西。 – PTS

1

您可以使用forfiles ...

forfiles /s /C /m *.dat "cmd /c tools.exe @file" 

欲瞭解更多信息,請參閱http://ss64.com/nt/forfiles.html

+0

謝謝你的回答!我甚至不知道這存在。可以幫助解決未來的問題。 但是,上面的答案更多的是我想要做的。 – PTS

+0

很高興保羅。感謝您提出問題和積極向上。 49分鐘前我剛剛發現了有關文件的文件。 :-) –

2

我在這個晚些時候,但是,補充Andriy的回答,你可以通過結合t來簡化BAT我爲循環,這可能會稍微更有效率,更清晰。

for /D /R %%d in (*) do (
    pushd %%d 
    for %%x in (*.dat) do tool.exe -c -f -e "%%x" 
    popd 
) 

作爲額外的獎勵,該版本當主環是指將不同的驅動器(這是不是在這個特別的OP問題的情況下),並具有恢復當前目錄的相對側值將解決的情況下在每次迭代時,如果其他命令被併入循環中,這也可能具有輕微的重要性。

+0

upvote也是,謝謝! – PTS