특정 패턴과 일치하지 않는 모든 파일 삭제-Windows 명령 행


12

명령 줄을 통해 항목을 삭제하는 것은 매우 쉽습니다.

del /options filename.extension

이제 폴더에서 .jpg로 끝나지 않는 모든 파일을 삭제하고 싶다고 가정 해보십시오.

문제는 지정된 모든 이미지를 .jpg로 변환하는 소프트웨어를 가지고 있지만 더 이상 필요하지 않은 원본을 남깁니다.

모든 다른 파일 유형에 대해 여러 명령문을 수행하는 것과 비교하여 단일 명령문을 실행하는 것이 훨씬 더 효율적입니다.

답변:


14

나는 이렇게 할 것입니다 :

attrib +r *.jpg
del /q *
attrib -r *.jpg

이렇게하면 먼저 모든 JPG 파일을 읽기 전용으로 만들고 다른 모든 항목을 삭제하고 (읽기 전용 파일을 자동으로 건너 뜁니다) JPG 파일을 다시 쓸 수있게 만듭니다.


챔피언처럼 일했습니다. 참고 : /s하위 디렉토리에 파일을 재귀 적으로 포함하려면 각 줄에 추가하십시오 .
척 윌버

9

실제로는 매우 쉽습니다.

당신은해야합니다 for파일을 반복 한 후 단순히 확장을 찾습니다

for %f in (*) do if not %~xf==.jpg del "%f"

트릭을 수행해야합니다 ( 여기 코드 ).


고마워하지만 그 자체만으로 내가 사용중인지도에 따라 다릅니다.
KdgDev

4
지도?
Joey

.jpg가 아니라 .jsp가 아니라 .xml이 아니라면 어떻게 말합니까?
user1164061

1

구출을위한 Powershell
Windows 7/8의 시대에 그것은 좋은 오래된 명령 행의 후계자입니다

Del C:\myFolder\* -exclude '*.jpg'

Del의 별칭입니다 Remove-Item. 재귀, 포함, 제외 및 필터링과 같은 몇 가지 옵션이 있습니다 (RegEx에 사용).

\*주어진 폴더에 파일을 포함 시키려면 추가 해야합니다


CMD 프롬프트에서 다음과 같이 작동합니다.PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi

참고 : PowerShell에는 Win 7/8이 제공됩니다. Windows XP 또는 Vista의 경우 다운로드하여 설치해야합니다.
Iszi

1

귀하의 질문에 직접 대답하지는 않지만 귀하의 변환기 옵션을 살펴보고 다음 사항을 확인했습니다.

  1. 원본 자체를 삭제할 수 있습니다

또는

  1. .jpg를 새 폴더에 쓰시겠습니까?

직접 할 수있는 옵션이 없습니다. JPG 인 경우 원본을 덮어 씁니다. 그러나 다른 모든 JPG는 디스크에 남아 있습니다.
KdgDev

@WebDevHobo-오, 그럼 Johannes 제안과 함께 갈 것입니다.
ChrisF

0

다양한 깊이의 수백 개의 디렉토리에 20,000 개의 파일이 포함되어있는 Windows 7 (NTFS 볼륨)의 TREE 디렉토리에서 확장자가 ".mp3"이 아닌 모든 파일을 찾는 방법을 찾고있었습니다. 불안, 나는 다음을 사용했다 :

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

이것은 DIR 명령 출력과 관련된 모든 것을 제거한 후 .mp3와 일치하지 않는 파일을 나열했습니다 ... 99 % 작동합니다 ... 일치하지 않는 파일의 이름이 표준 DIR 출력의 키워드 중 하나가 아닌 한- 아마도 DIR 보고서를 헤더 / 요약 정보를 적게 만드는 방법이있을 수 있지만 이것이 대부분의 방법으로 귀찮게하지 않았습니다.


분명히 Posting code here는 일부 특수 문자를 제거합니다. 따라서 위의 "cd"명령은 자체적으로 행에 있고 대상 루트 디렉토리를 지정했으며 첫 번째 "find"명령은 "<"DIR ">을 포함하는 행을 모두 제거했습니다. "(go figure)는 dir 명령의 결과물입니다. 그러나 여기의 포스트 코드는 일종의 메타 명령어라고 생각할 수도 있습니다.
CaptPat

1
이 작업을 수행하는 훨씬 쉬운 방법 /bdir명령 의 플래그입니다 . dir /b현재 디렉토리에만 파일 이름 및 확장자를 dir /s /b나열하고 현재 및 모든 서브 디렉토리에있는 모든 파일의 완전한 이름을 나열합니다. 루프 find /v대신 파이핑 for하는 것은 기억해야 할 좋은 터치이지만 그것이 작동한다고 생각하지 않습니다 del.
Bob

0

파일 이름과 일치하는 모든 파일을 삭제하는 다른 방법은 다음과 같습니다. for 루프 목록의 모든 파일과 if NOT은 파일 이름 (디렉토리 이름없이)과 일치합니다.

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.