명령 줄을 사용하여 Windows에서 폴더를 완전히 삭제


57

내부에 다른 폴더와 파일이 들어있는 하나의 폴더를 삭제해야합니다. 시도 del하고 rmdir명령했지만 때로는 일부 오류 줄로 실패합니다.[PATH]: The directory isn't empty.

좋은 대안이 있습니까?


적절한 플래그가있는 rmdir이 디렉토리 트리 (및 / 또는 트리 자체)의 모든 것을 제거하는지 여부에 불일치가 있었으며 가능한 유일한 설명은 Harry Johnston이 말한 것입니다.
r_alex_hall

답변:


15

이것은 자동 빌드 스크립트에서 많이 발생합니다.

그 이유는 "공유 삭제"를 사용하여 해당 디렉토리에 파일이 열려있는 일부 응용 프로그램 일 수 있습니다. 즉, 응용 프로그램은 파일 삭제를 허용하지만 (DeleteFile 호출이 실패하지 않는 이유는 해당 응용 프로그램이 핸들을 닫은 후에 만 ​​파일이 사라집니다.

즉, rmdir명령이 폴더를 삭제하려고 할 때 파일이 여전히있을 수 있으므로 오류 메시지가 표시됩니다. 그 후 곧, 응용 프로그램이 핸들을 닫고 파일이 사라지고 폴더를 검사 할 때 파일을 말하면 rmdir비어있을 것입니다.

적어도 그것은 내 이론이다.

Harry Johnston이 제안한 해결 방법이 좋습니다. rmdir명령 사이에 일시 중지 만 삽입 합니다. 물론 Windows에는 쉽게 스크립트 가능한 "일시 정지"명령이 없습니다 (수정 : 고대 Windows 버전은 최신 버전이 아닙니다. 주석 참조). 그러나 초 단위 입도가 충분 ping하면 일시 중지를 만드는 데 사용할 수 있습니다 .

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

전체적으로 :

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

내 경험에 따르면 일시 중지는 필요하지 않지만 YMMV입니다. (물론 실제로 다른 응용 프로그램이있는 경우 응용 프로그램을 식별하고 가능한 경우 명시 적으로 기다릴 것을 기다리는 것이 좋습니다.)
Harry Johnston

글쎄 ... 재 시도당 1 초 지연으로 10x 재시도 루프를 구현했습니다. 지금 작동합니다. 나는 일시 중지를 제거하려고 시도하지 않고 다시 실패하는 것을보기 만합니다 :-) 물론 그것이 필요하다는 것을 의미하지는 않습니다. 좀 더 조심하십시오.
Paul Groke

2
OT : 이것이 내가 창문을 싫어하는 이유입니다. 모든 것이 너무 어렵다. rm -rf /directory/모든 운영 체제에서 전역 적이어야합니다.

2
실제로 "일시 정지"명령이 있습니다. 3 초 동안 일시 중지하려면 다음을 사용할 수 있습니다.timeout /t 3
r_alex_hall

@r_alex_hall 실제로 (하지만 Vista부터는 XP부터는 pause명령 이 없습니다 ).
misha256

57

시험:

rmdir /S your_directory

또는:

rmdir /S /Q your_directory 

확인 메시지를 건너 뛰려면


1
나는 이미 이러한 옵션을 시도했지만 내가 쓴 del하고 rmdir아무것도 요구하지 않습니다, 그들은 단지 설명에서처럼 몇 줄을 보낼 수 있습니다.
프란체스코 자니 니

2
rmdir /s삭제할 수있는 모든 것을 삭제합니다. 프로그램에 의해 잠겨있는 파일, 읽기 전용 파일 또는 삭제하기 위해 관리 액세스가 필요한 파일이있을 수 있습니다. 당신을 위해 모든 상황을 처리하는 하나의 명령은 없습니다
nvuono

여전히 오류 메시지가 표시되면 PowerShell을 사용해보십시오. cmdlet Remove-Item은 rmdir보다 약간 강력합니다.
AndrewQ

1
rmdir / S <directory> 디렉토리와 하위 폴더 및 디렉토리를 삭제합니다. 또한 확실합니까? Windows 10. 감사합니다
Jasmeet

1
@r_alex_hall RMDIR / s는 실제로 디렉토리의 파일을 삭제합니다. 그러나 DEL / s는 파일 만 삭제하고 디렉토리를 유지하므로 RMDIR이 더 나은 옵션입니다.
JCH2k

11

읽기 전용 파일이있을 수 있습니다. del / F 옵션을 사용하여 파일을 제거 할 수 있습니다

     del /S /F your_directory
     rmdir your_directory

숨겨진 파일이있을 수도 있으며 정말로 삭제하려는 경우 다음을 사용 하여이 작업을 수행 할 수 있습니다

     del /S /F /AH your_directory
     rmdir your_directory

그래도 실패하면 일부 파일을 삭제할 수있는 권한이 없거나 일부 파일이 여전히 사용 중입니다.


이것이 정답이어야합니다!
jdhao

4

Windows 7 (및 다른 버전)에는 때때로이 증상을 일으키는 버그가 있다고 생각합니다. 또는 타사 소프트웨어의 버그 일 수 있습니다. (아마도 Symantec Endpoint Protection을 설치 했습니까?)

어쨌든, 나는 그것을 꽤 자주 가로 질러 갔다. 대부분의 경우이 문제는 rd /s /q두세 번 연속 으로 실행하면 해결할 수 있습니다 .

이것이 배치 파일에 있으면 다음과 같이 할 수 있습니다.

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

동의했다. / q silent 옵션이없는 rd / s foo를 사용하면 모든 하위 폴더가 삭제되지만 프롬프트에 Y로 응답해야하므로 배치 파일에 참석해야합니다. 내가 아는 이상이 아닙니다.
Anthony

3

사용 del후, 내부의 파일을 rmdir폴더를 제거 할 수 있습니다.

rmdir방법 을 사용하여 모든 파일을 제거 하려면 디렉토리 이름 앞에/S 스위치 사용하고 /Q삭제 프롬프트를 표시하지 마십시오 . 파일을 놓치지 않기 때문에 이것이 가장 좋은 방법입니다. / Q 스위치는 시스템 또는 숨김 파일 속성에 대해 경고하지 않으므로주의하십시오.


2

노드 를 사용하는 경우 다음 과 같이 rimraf 종속성을 사용할 수 있습니다 .

설치를 실행하십시오 : npm install rimraf -g

폴더 삭제 : rimraf SourceFolder

이것은 오류가 발생했을 때 도움이되었습니다.

소스 파일 이름이 파일 시스템에서 지원하는 것보다 큽니다.


0

윈도우 (DOS, 윈도우 95 / 98 / ME)의 이전 버전을 폴더 DELTREE에 동등 RM또는 RMDIR. 나는 DELTREEWindows 7 워크 스테이션에서 배치 파일로 잘 사용합니다.

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.

0

나는 당신이 이것을 다음과 같이 사용할 수 있다고 생각합니다 :

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"

1
SU에 오신 것을 환영합니다! 내가 왜 하향 투표 했습니까? 1) 형식이 잘못되었습니다. 2) 몇 년 전에 이미 게시 된 것과 동일한 필수 솔루션을 제공합니다 (항상 새 솔루션을 게시하기 전에 게시 된 솔루션을 읽으십시오!) 3) 질문에 적합하지 않습니다 (솔루션이 삭제 된 폴더를 다시 만듭니다. 요청하지 않았습니다).
zagrimsan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.