programing tip

배치-rmdir 명령에서 "디렉토리가 비어 있지 않습니다"가져 오기

itbloger 2020. 10. 19. 07:49
반응형

배치-rmdir 명령에서 "디렉토리가 비어 있지 않습니다"가져 오기


배치 스크립트를 만들고 있는데 스크립트의 일부가 디렉토리와 모든 하위 디렉토리를 제거하려고합니다. 비어 있지 않은 하위 디렉토리에 대한 간헐적 인 오류가 발생합니다. 색인 생성이 범인이라는 기사를 읽었습니다. WSearch를 비활성화했지만 결국 다시 오류가 발생했습니다.

rmdir /S /Q "C:\<dir>\"

나는 Harry Johnston이 언급 한 것과 동일한 문제를 경험했습니다. 당신을 위해 비우기 위해 의도 rmdir /s /q되었지만 디렉토리가 비어 있지 않다고 불평 /s합니다! 개인적으로 Windows의 버그라고 생각합니다.

내 해결 방법은 del디렉토리 자체를 삭제하기 전에 디렉토리의 모든 것입니다.

del /f /s /q mydir 1>nul
rmdir /s /q mydir

( 그렇지 않으면 삭제하는 모든 단일 파일을 나열하기 때문에 1>nul의 표준 출력을 숨 깁니다 del.)


이 문제에 대해 잘 알고 있습니다. 가장 간단한 해결 방법은 작업을 조건부로 반복하는 것입니다. 실제로 열린 파일이나 권한 문제가없는 한, 두 번 연속으로 실패하는 것을 본 적이 없습니다.

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme

방금 동일한 문제가 발생했으며 일부 파일이 손실되거나 손상되었습니다. 문제를 해결하려면 디스크 검사를 실행하십시오.

chkdsk /F e:

검색 창 상자 또는 cmd 프롬프트에서 실행할 수 있습니다. /F이 파일을 복구처럼 찾아 문제를 해결합니다. 이 실행이 완료되면 평소처럼 파일과 폴더를 삭제할 수 있습니다.


관리자로 명령 프롬프트를 입력하고 실행하십시오.

rmdir /s <FOLDER>

@gfullam이 @BoffinbraiN의 답변에 대한 주석에서 언급했듯이 <dir>삭제중인 파일이 파일을 포함하는 파일이 아닐 수 있습니다 <dir>. "디렉토리가 비어 있지 않습니다."라는 메시지를받는 하위 디렉토리가있을 수 있으며 유일한 해결책은 다음과 같습니다. 디렉토리를 재귀 적으로 반복하고 포함 된 모든 파일을 수동으로 삭제합니다. 결국 rmUNIX 의 포트를 사용하기로 결정했습니다 . rm.exeGit Bash, MinGW, Cygwin, GnuWin32 등이 함께 제공됩니다. PATH에 상위 디렉토리가 있고 UNIX 시스템에서와 같이 실행하기 만하면됩니다.

배치 스크립트 예 :

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"

나를 위해 일한 것은 다음과 같습니다. RMDir 명령이 거의 항상 "디렉토리가 비어 있지 않습니다"를 실행하는 것처럼 보입니다.

:Cleanup_Temporary_Files_and_Folders

Erase /F /S /Q C:\MyDir

RMDir /S /Q C:\MyDir
If  Exist  C:\MyDir  GoTo Cleanup_Temporary_Files_and_Folders

비슷한 문제가 발생하여 Windows 탐색기를 통해 빈 폴더를 삭제하려고했습니다. 비어 있지 않은 오류가 표시되었으므로 admin cmd를 통해 시도했지만 여기에 대한 답변이 도움이되지 않았습니다.

파일을 빈 폴더로 옮긴 후. 비어 있지 않은 폴더를 삭제할 수있었습니다


내 경우에는 폴더를 루트 디렉토리로 옮겼습니다.

move <source directory> c:\

그런 다음 명령을 실행하여 디렉토리를 제거하십시오.

rmdir c:\<moved directory> /s /q

나는 "C : \ Users \ User Name \ OneDrive \ Fonts"를 가지고 있는데, 이것은 "C : \ Windows \ Fonts"에 mklink (/ D)되어 있었고, 저도 같은 문제였습니다. 나의 경우에는

cd "C : \ Users \ 사용자 이름 \ OneDrive"

rd / s 글꼴

Y (동작 확인)

나를 도와 주었다. 나는 그것이 당신에게도 도움이되기를 바랍니다; D


Harry Johnston의 답변과 유사하게 작동 할 때까지 반복합니다.

set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
    rd /s /q "%dirPath%" 
    goto removedir
)

가능한 원인은 다음과 같습니다.

  1. 더 높은 권한이 필요한 파일 또는 하위 디렉토리가 있습니다.
  2. WSearch뿐만 아니라 바이러스 스캐너 또는 기타 다른 파일이 사용중인 파일이 있습니다.

1.)의 runas /user:Administrator경우 더 높은 권한을 얻거나 컨텍스트 메뉴를 통해 배치 파일을 관리자로 시작하기 위해 시도 할 수 있습니다 . 그래도 도움이되지 않으면 관리자도 권한이 없을 수 있습니다. 그런 다음 디렉토리의 소유권을 인수해야합니다.

2.) 다운로드 Process Explorer의 경우를 클릭 Find/Find handle or DLL...하거나 누르고 Ctrl+F디렉토리 이름을 입력 한 다음 누가 사용하는지 확인합니다. 가능한 경우 디렉토리를 사용하는 응용 프로그램을 닫습니다.


rmdir <directory> /s

이것은 나를 위해 일했습니다.


이것은 디렉토리에 있기 때문에 발생합니다. CLI 및 탐색기가 디렉토리에 없는지 확인하십시오. 확인하려면 모두 닫으십시오. 그런 다음 관리자 권한으로 cd상위 디렉토리로 실행하고 다음을 실행하십시오.

rmdir /s /q mydir

참고URL : https://stackoverflow.com/questions/22948189/batch-getting-the-directory-is-not-empty-on-rmdir-command

반응형