我有兩個驅動器,假設驅動器A (F:) 和驅動器B (G:)。我曾經將磁碟機 B 的所有內容複製到磁碟機 A 中。但之後,B 盤中加入了一些新檔案和資料夾。我想從磁碟機 B 中刪除重複的檔案和資料夾,只保留磁碟機 A 中不存在的檔案和資料夾。
我嘗試了以下命令只是為了檢查是否找到重複項,但它無法按我想要的方式工作,因為它在變數中有完整路徑%%a
。當然,如果它有效,現在的輸出echo %%a
將被替換為等效的輸出。DEL
@echo off
for /F "tokens=*" %%a in ('dir G:\*.* /b /s') do if not exist "F:\%%a" echo %%a >> C:\Users\billy\Desktop\files.txt
pause
如果我/s
從dir
命令中刪除開關,它會起作用,因為它%%a
只有檔案名稱而不是完整路徑,但它不能遞歸地用於子資料夾,因此它沒有那麼有用。
答案1
@echo off
for /F "delims=" %%a in ('
dir G:\*.* /b /s /A:-D
') do if not exist "F:%%~pnxa" echo del "%%~a" >> C:\Users\billy\Desktop\files.txt
pause
解釋:
/A:-D
從清單中排除目錄(資料夾),因為後續del
命令將刪除文件而不是目錄(按照del /?
:如果指定了目錄,則將刪除該目錄中的所有文件,但不會刪除資料夾本身);- 分開對待資料夾:使用另一個
for /F
反對dir
與/A:D
開關,但在這種情況下使用rd
而不是del
命令刪除資料夾;用於rd /S
刪除整個資料夾樹(除了資料夾本身之外的所有檔案和子資料夾)。 %%~pnxa
展開%%a
至滿路徑+名稱+副檔名包括前導\
(無G:
磁碟規格);del "%%~a"
雙引號完整路徑可以正確處理帶有空格的路徑;- 我建議
"delims="
不要"tokens=*"
正確處理檔案名稱中可能的前導空格(這可以在沒有/S
標誌的情況下發生); - 考慮其他命令列開關(請參閱
del /?
和rd /?
)。