2013-02-11 171 views
1

我想連接來自多個目錄的文件。從單一的目錄,我知道,你可以執行從批處理文件連接多個目錄中的文件

copy /B *.blah all.blah 

與擴展.blah文件串聯到名爲all.blah單個文件。我什麼結構看起來就像是:

level 1/ 
    level 2_1/ 
     file_1.blah 
     file_2.blah 
    level 2_2/ 
     ... 
    level 2_3/ 
     ... 
    do_not_include_this_directory/ 
     ... 

什麼我希望做的是建立一個單一的all.blah文件中這是所有在level*子目錄的文件.blah的串聯頂級目錄,而不包括do_not_include_this_directory目錄中的任何文件。

我的目標是在批處理文件中執行此操作(此批處理文件中將包含用於不同目錄的其他文件連接邏輯),但是我花了一個小時來玩弄cmd for邏輯來無濟於事(某些我的目錄在名稱中有空格)。也許這是我應該使用python腳本來做的事情?我認爲這可以通過使用一些for循環與copy相對容易地完成,但我的這些技能至少缺乏說服力(剛剛在大約2小時前遇到過cmd)。

有沒有人知道如何做到這一點,或者你會只是建議我貶低和使用Python寫東西?任何幫助或建議,將不勝感激。

回答

2

可以在命令行中很容易做到沒有一個批處理腳本:)

copy nul all.blah >nul&for /d %F in (level*) do @copy /b all.blah + "%F\*.blah" >nul 

作爲一個批處理腳本

@echo off 
copy nul all.blah >nul 
for /d %F in (level*) do copy /b all.blah + "%F\*.blah" >nul 

我不知道,如果/B開關完全正確。它具有不同的含義,具體取決於它出現的位置:在任何文件之前,源之後或目標之後。

+0

的確,他們已經爲'[/ A |/B]'在內置的幫助中。也許,在所有文件之前指定選項意味着它們全部被視爲(被視爲)二進制文件。你肯定知道這是否是這樣嗎? – 2013-02-11 09:47:12

+0

@AndriyM - 我懷疑是這樣,但我不確定。 – dbenham 2013-02-11 10:53:21

+0

我仍然有忽略「不包括...」目錄的問題,但這是因爲我沒有很好地解釋我的情況。如何跳過名稱相似的目錄? AKA我希望以「level 0xxxx」(x是一些數字)開頭的目錄,忽略任何其他目錄(包括像「級別Axxxx」(x是什麼)的目錄)如果需要更多的說明,我可以編輯我的問題 – JesseBuesking 2013-02-12 05:25:00

0

這對於Windows批處理文件來說似乎相當可怕。在Windows 7下測試;情況因人而異,等

@rem get all pathnames, even in excluded directories 
@rem EDIT THIS COMMAND to change wildcard to match 
dir /b/s *.c >files.tmp 
@rem get rid of things with prefix we want to exclude 
@rem EDIT THIS COMMAND to change prefix 
findstr /V "C:\temp\fee" files.tmp >files2.tmp 
del copy.tmp 
@rem append things one at a time the hard way! 
For /f tokens^=*^ delims^=^ eol^= %%a in (files2.tmp) do (
copy "%%a" + copy.tmp copy2.tmp 
del copy.tmp 
rename copy2.tmp copy.tmp 
echo.%%a) 
@rem clean up 
del copy2.tmp 
del files.tmp 
del files2.tmp 
相關問題