rmdir 또는 rd 명령에 와일드 카드 사용


40

D:드라이브에 폴더가 있다고 가정 해 봅시다 .

D:\Air
D:\Abonden
D:\All
D:\Whatever

"A"로 시작하는 모든 폴더 (모든 하위 폴더 및 파일 포함)를 삭제하고 싶습니다. 나는이 명령을 시도했다 :

rmdir D:\A* /s /q

그래도 오류가 발생합니다 :(

파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 올바르지 않습니다.

del명령은에서 작동 *하지만 폴더도 삭제해야합니다. 명령
을 통해 그것을 달성 할 수있는 방법이 rmdir있습니까?


2
Windows 또는 DOS 명령 셸 개발에서 균일 성과 상식은 결코 작용하지 않았습니다. 슬픈 부분은이 쉘이 개발 될 때 지능적인 디자인에 빛을 비출 모델 시스템이 있다는 것입니다. 물론 껍질은이 쓰레기를 함께 때리는 끔찍한 존재하지 않는 사고 과정의 한 예 일뿐입니다. 내가 생각하는 것을 말할 수 있기를 바랍니다.
Rick O'Shea

답변:


33
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

그래도 이것을 사용하여 테스트하십시오.

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

그러면 명령 프롬프트에 실행될 명령이 파이프되고 진행 상황을 확인할 수 있습니다.

"C : \ temp \ jjj \ aaa"와 같은 하위 폴더도 검색하고 aaa 폴더를 삭제합니다. 최상위 폴더 "C : \ temp \ aaa"만 보려면 "/s"명령에서 를 제거하십시오 .

이것의 핵심은 검색 문자열에 넣을 A *입니다. 이 같은 와일드 카드 등 받아 들일 것 aaa*, aaa*그리고 *aaa*당신이 그것을 원하는 경우.


경로 / 폴더 이름에 공백 문자가 포함되어 있으면 명령이 그대로 중단됩니다.
and31415

1
A *에 "IF NOT EXIST goto EFO"를 추가 할 수 있습니까?
serdar

3
경로에 공백 문자가 포함 된 경우 작동합니다. / f "delims ="% i in ( 'dir / a : d / s / b A *') do rd / s / q "% i"
Luis Cantero-MSFT

5
배치 파일 내 에서 이것을 실행하는 경우 두 퍼센트 부호를 사용해야 명령이 다음과 같이됩니다.for /f %%i in ('dir /a:d /s /b A*') do rd /s /q %%i
Fred Clausen

'w / sub'플래그를 두 번 사용할 필요가 없습니다 :)
lunicon

25

와일드 카드를 사용하여 폴더 삭제

rmdir/ rd명령은 혼자가 지원하지 않는 와일드 카드 문자 (즉, *?). 이 제한을 for루프 로 감싸서 해결할 수 있습니다 .

사용법 예

for /d %G in ("X:\A*") do rd /s /q "%~G"

참고 파일과 폴더를 삭제하면서 rd명령을 echo먼저 대체 할 수 있습니다 . 이렇게하면 실제로 삭제해서는 안되는 것을 보장 할 수 있습니다.

여러 패턴

다른 패턴과 일치하는 여러 폴더를 삭제하기 위해 구문이 다르지 않습니다. @dbenham이 올바르게 지적했듯이 한 줄 명령으로 충분합니다. 다른 경로를 지정할 수도 있습니다.

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

보너스-폴더 존재 확인

특정 폴더가 있는지 확인하려는 경우 다음 명령을 사용할 수 있습니다.

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

추가 자료


A *에 "IF NOT EXIST goto EFO"를 추가 할 수 있습니까?
serdar

예를 들어 A 문자로 시작하는 폴더가 없다고 가정합니다. 따라서 명령은 B *가되어야합니다. 내가 설명 할 수 있는지 모르겠다 :(
serdar

1
나에게서 +1 나는 하향 투표를 이해하지 못한다. 당신은 당신의 간단한 여러 패턴 할 수 있지만 FOR /DFOR /D /R명령. 간단하게 사용하십시오 in( "A*" "B*" "C?D" ).
dbenham

1
/R마스크와 일치하는 하위 폴더가 그렇지 않은 상위 ​​폴더에있을 수 있으므로 실제로 옵션 이 필요합니다 .
dbenham

5
경고 :이 솔루션을 .bat 파일에 사용하려면 % G 대신 %% G를 사용해야합니다. 여기를
ValarDohaeris

18

아직 아무도 OP에 파일에 대해 말하지 않았습니까?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/ P는 경로 이름-검색이 시작되는 위치
/ M은 A로 시작하는 파일을 찾는 검색 마스크입니다.
/ C는 실행할 명령입니다
/ S는 재귀 하위 폴더입니다 (op는 요청하지 않았으므로 여기에 포함되지 않았습니다).

2
이것은 훌륭한 답변입니다. 받아 들여야합니다.
eacousineau

1
아주 좋은 해결책과 잘 설명했습니다.
Andreas

유용한 답변 : and31415의 답변for /d 과 같이 D이지만 IMO 는 더 깨끗하고 효율적입니다.
Superole

12

adn31415 답변은 정확하지만 배치 또는 cmd 스크립트에 넣으면 중단됩니다. 나는 이것이 당신이 그것을 어떻게 사용하는지 알아낼 때까지 몇 시간 동안 머리를 두 드렸습니다.

DOS 명령 창에서 :

for /d %G in ("X:\A*") do rd /s /q "%~G"

배치 또는 cmd 스크립트에서 :

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

".bat"또는 ".cmd"파일에 넣으려면 "%"문자를 두 배로 늘려야합니다.


3
배치 스크립트 시간을 절약했습니다!
Tuan

문제가없는 친구 :) 그것이 분명하지 않다는 것을 알았을 때 더 많은 사람들이 대답 할 것이라고 대답 한 이유입니다.
Sam B

삭제하지 않도록 제외를 추가 할 수 있습니까?
serdar

SET / P PC = ( "\\ % PC % \ D $ \ A *. *")에서 / d %% a의 IP 또는 호스트 이름을 입력하십시오. rd / s / q "%% a"이 스크립트가 올바르게 작동합니까? ?
serdar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.