我有一個像這樣的文件層次結構:
RootDir
/A
/fileA.txt
/B
/C
/fileC.txt
/fileB.txt
/otherFile1.txt
/otherFile2.txt
我只想複製子目錄(即A
, B
)和他們之下的一切(這意味著我希望複製除otherFile1.txt
和 之外的所有內容otherFile2.txt
)。
根目錄下有超過 2 個目錄和 2 個文件,因此我不想按名稱指定每個目錄和文件。
有什麼建議麼?
答案1
cd SOURCE
for /F "delims=" %a in ('dir /B /AD') do @xcopy /E "%a" "DESTINATION\%a\"
怎麼運作的:
一旦您輸入來源目錄,該指令
dir /B /AD
逐行列出所有目錄 (/AD
) ( )/B
。for /F "delims=" %a in ('...') do
遍歷指令的輸出...
,將變數設定%a
為輸出的下一行並執行後面的操作do
。在這裡,
delims=
確保變數保存整行的內容。如果沒有它,%a
只會將字元保留到第一個空格。xcopy /E "%a" "DESTINATION\%a\"
將目前指定的目錄複製%a
到該目錄中的同名資料夾中目的地。該/E
開關也會導致目錄的內容被複製。1在目標中指定目錄名稱至關重要。沒有它,
fileA.txt
將被複製到DESTINATION\fileA.txt
(而不是DESTINATION\A\fileA.txt
)。結尾的反斜線用來指示這
%a
是目錄名,而不是檔案名稱。雙引號對於正確處理包含空格的目錄名稱是必要的。
如果要在批次檔中使用此指令,則必須使用第二個百分號對所有百分號進行轉義,即%a
變為%%a
。
1 /E
也複製空目錄。如果不需要,您可以使用它/S
來代替。
答案2
與 Dennis 和 David Ruhmann 的答案類似,但使用 FOR /D 迴圈而不是 FOR /F。
for /d %F in (rootFolderPath\*) do @xcopy /e /i "%F" "destinationPath\%~nxF"
答案3
我能想到的最好的方法是使用 Robocopy 的“/create”開關,它僅複製整個資料夾結構,以及“僅 0 長度文件” - 我確信這會導致所有文件被排除
Robocopy /e /create \(資料夾A的來源路徑) \(目標路徑)
Robocopy /e /create \(資料夾B的來源路徑) \(目標路徑)
您也可以(如果它們都是相同的檔案類型,或少量已知的檔案類型)使用「排除檔案」「/xf」開關並通配符排除檔案類型,如下所示:
Robocopy /e(資料夾A的來源路徑)(目標路徑)/xf *.txt
Robocopy /e(資料夾B的來源路徑)(目標路徑)/xf *.txt
答案4
本機 Windows CMD 解決方案。僅複製 RootDir 中的子資料夾(及其內容)。
for /f "delims=" %%A in ('dir RootDir /a:d /b') do xcopy %%A DestDir /e /i