Windows CMD는 두 디스크 드라이브 사이에서 중복 파일을 찾습니다.

Windows CMD는 두 디스크 드라이브 사이에서 중복 파일을 찾습니다.

드라이브 A(F:)와 드라이브 B(G:)라는 두 개의 드라이브가 있습니다. 한번은 DriveB의 모든 내용을 DriveA에 복사한 적이 있습니다. 그러나 그 후에는 DriveB에 몇 가지 새로운 파일과 폴더가 추가됩니다. 드라이브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:-Ddel후속 명령이 디렉터리 대신 파일을 삭제하므로 목록에서 디렉터리(폴더)를 제외하려면 다음과 같이 del /?하십시오. 디렉터리를 지정하면 디렉터리 내의 모든 파일이 삭제되지만 폴더 자체는 제거되지 않습니다.
  • 폴더 분리: 스위치를 사용 for /F하여 다른 폴더를 사용 하지만 이 경우에는 명령 대신 사용합니다.dir/A:Drddel폴더를 삭제하다; rd /S전체 폴더 트리(폴더 자체를 제외한 모든 파일 및 하위 폴더)를 제거하는 데 사용합니다 .
  • %%~pnxa%%a전체로 확장경로 + 이름 + 확장자선도 포함 \( G:디스크 사양 없음);
  • del "%%~a"공백이 있는 경로를 적절하게 처리하려면 전체 경로를 큰따옴표로 묶어야 합니다.
  • "delims="파일 이름에서 가능한 선행 공백을 적절하게 처리하는 대신에 권장합니다 "tokens=*"(플래그 없이도 가능 /S).
  • 추가 명령줄 스위치를 고려하십시오( del /?및 참조 rd /?).

관련 정보