2012-06-04 51 views
1

我試圖在Windows命令提示符處有一個嵌套for循環,我去指定文件夾中的每個子文件夾以將其中的所有文本文件連接到一個文本文件中。我試圖使用Windows批處理循環通過子文件夾並運行命令

FOR /F IN (.) DO (for %f in (*.dat) do type 「%f」 >> aggregate.txt) 

但它不工作。誰來幫幫我!

回答

2

我不知道,如果你想連接.txt或.dat文件,但這應該爲.DAT

(for /r %f in (*.dat) do @type "%f")>aggregate.txt 

類型HELP FOR命令行工作更多的信息上的許多形式FOR語句。

把整個命令括在圓括號裏,只做一次重定向而不是對每個文件附加重定向會更有效率。

編輯 - 在評論細化需求的解決方案:每個文件夾一個聚合

如果需要的話,首先刪除任何現有的aggregate.txt文件

del /s aggregate.txt 

那麼下面應該給你想要的結果

for /r %F in (*.dat) do @type "%F" >>"%~dpF\aggregate.txt" 

請注意,如果將命令放入批處理文件中,則必須在FOR變量前加倍。例如,命令行上的%F需要在批處理文件中爲%%F

+0

這有很大幫助!但我試圖連接每個子文件夾中的所有.dat文件,並在子文件夾本身中保留輸出.txt文件。上面的代碼可以幫助我連接所有子文件夾中的所有.dat文件。 – user1436056

+0

@ user1436056 - 爲每個文件夾一個聚合添加了解決方案。 – dbenham

1

只需使用for /r ...即可遍歷給定目錄的所有子目錄。例如:

for /r %f in (*.dat) do @type %d >> aggregate.txt 

無需嵌套。或者:

(for /r %f in (*.dat) do @type %d) >> aggregate.txt 

可以使用/d代替/r去只有一個級別深層次和列表只有文件夾(不匹配的文件一定通配符)。當「手動」執行目錄遍歷時,可以將其用作一個難題。然而,考慮到NT腳本中的變量擴展(內部循環,有和無子)的問題,我建議你堅持直接的解決方案。過去我已經將它用於清理腳本,但現在已移到for /r


這應該讓你開始

@echo off 
for /r %%i in (*.dat) do @call :ConcatFolder "%%i" 

:ConcatFolder 
if "" == "%1" goto :EOF 
setlocal ENABLEEXTENSIONS 
set FLDR=%~dp1 
type "%1" >> "%FLDR%aggregate.txt" 
endlocal & goto :EOF 
+0

這有助於很多!但我試圖連接每個子文件夾中的所有.dat文件,並在子文件夾本身中保留輸出.txt文件。上面的代碼可以幫助我連接所有子文件夾中的所有.dat文件。 – user1436056

+0

好了,所以每個文件夾中的所有文件(如'.dat')成單個'.txt'文件,是否正確?我會相應地調整代碼。 – 0xC0000022L

+0

yeap!非常感謝!反正是有把所有這些不同的子文件夾中的數據彙總到不同的Excel工作表的? – user1436056

相關問題