簡體   English   中英

Windows批處理循環子文件夾並運行命令

[英]Windows batch looping through subfolders and running a command

我試圖在Windows命令提示符下有一個嵌套的for循環,我轉到指定文件夾中的每個子文件夾,將其中的所有文本文件連接成一個文本文件。 我正在嘗試使用

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

但它不起作用。 誰來幫幫我!

我不確定你是否要連接.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

只需使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM