2011-09-20 4 views
1

두 폴더 사이의 파일 겹침을 제거하는 배치 파일을 작성하고 싶습니다.다른 디렉토리에있는 모든 파일을 삭제하는 배치 파일을 작성하려면 어떻게해야합니까?

다른 말로하면 "폴더에서 제거하면 B 폴더에도 나타나는 모든 파일"이라고 말하고 싶습니다. 보기의 SQL 관점에서

, 그것은 뭔가 같은

DELETE FROM FOLDERA WHERE EXISTS(SELECT FILE FROM FOLDERB) 

것입니다하지만 윈도우 파일 시스템에 그것을 달성하고 싶다.

답변

1
SET if_it_exists_here=C:\folderB 
SET then_delete_it_there=C:\folderA 
CD "%if_it_exists_here%" 
FOR %%A IN (*.*) DO (
IF EXIST "%then_delete_it_there%\%%~nxA" DEL /Q /F %then_delete_it_there%\%%~nxA 
) 
+0

이것은 흥미로운 대안입니다. 이 접근법에 특별한 이점이 있습니까? – JosephStyons

+0

이것은 파일이 있다고 가정하고 삭제할 때와 달리 파일을 삭제하기 전에 찾습니다. 따라서'2>'로 리디렉션하면 깨끗하게 나옵니다. 필자는'2> file> file2'를 리다이렉트하여 코드에 아무런 문제가 없음을 확인하고 STDERR에 "file not found"를 반환하도록 테스트합니다. 성가신 = /. 그냥 아가씨 야. – Mechaflash

+0

좋은 점, 나는 내 자신보다는 이것을 사용할 것이라고 생각한다. 나는 그것이 많은 수의 파일들로 더 잘 수행 될 것이라고 생각한다. – JosephStyons

1

내 자신의 질문에 대답 :

set if_it_exists_here=C:\folderB 
set then_delete_it_there=C:\folderA 
cd "%if_it_exists_here%" 
FOR /F "tokens=*" %%G IN ('dir *.* /b /a:-d') DO del "%then_delete_it_there%\%%G" 
+0

나는 파일이 항상 folderA와 folderB에 모두 존재한다고 가정합니까? – Mechaflash

+0

아니요, 꼭 그런 것은 아닙니다. 중복이 없으면 스크립트는 아무 것도 삭제하지 않습니다. – JosephStyons

0

건물을 Mechaflash에 의해 대답에, 여기 UNC 경로로 작동하는 버전입니다.

SET if_it_exists_here=\\server1\some\folder 
SET then_delete_it_there=\\server2\some\folder 
CD "%if_it_exists_here%" 
FOR %%A IN ("%if_it_exists_here%\*.*") DO (
IF EXIST "%then_delete_it_there%\%%~nxA" DEL /Q /F %then_delete_it_there%\%%~nxA 
) 
관련 문제