Windows CMD 尋找兩個磁碟機之間的重複文件

Windows CMD 尋找兩個磁碟機之間的重複文件

我有兩個驅動器,假設驅動器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

如果我/sdir命令中刪除開關,它會起作用,因為它%%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 /?)。

相關內容