배치 스크립트를 만들고 있으며 스크립트의 일부가 디렉토리와 모든 하위 디렉토리를 제거하려고합니다. 비어 있지 않은 하위 디렉토리에 대한 간헐적 인 오류가 발생합니다. 색인 생성이 범인이라는 기사를 읽었습니다. 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
.)
mydir
동일한 "비어 있지 않음"오류가 발생 하는 시나리오가 발생했습니다. 나는에 있었다 그래서 cd
으로 mydir
하고 수행 del
하는 각 디렉토리뿐만 아니라의 파일에. 궁극적으로 효과가 있었지만 다른 하위 수준에서이 과정을 세 번 반복해야했다면 꽤 패배했다고 느꼈을 것입니다.
del /s
.
rd /s /q mydir
명령 만 사용하여 제거 작업을 완료합니다 .
이 문제에 대해 잘 알고 있습니다. 가장 간단한 해결 방법은 작업을 조건부로 반복하는 것입니다. 나는 그것이 실제로 열린 파일이나 권한 문제가 아니라면 두 번 연속으로 실패하는 것을 본 적이 없습니다!
rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
IF EXIST
가죽 Access is denied
및 기타 상황. 나는 DIR c:\deleteme
모든 것보다 먼저 검사하는 것과 같은 것을 추가했습니다 .
비슷한 문제가 발생하여 Windows 탐색기를 통해 빈 폴더를 삭제하려고했습니다. 비어 있지 않은 오류를 표시했기 때문에 admin cmd를 통해 시도했지만 여기에 대한 답변이 도움이되지 않았습니다.
파일을 빈 폴더로 옮긴 후. 비어 있지 않은 폴더를 삭제할 수있었습니다
@gfullam이 @BoffinbraiN의 답변에 대한 주석에서 언급했듯이 <dir>
삭제중인 파일이 파일을 포함하는 파일이 아닐 수 있습니다 <dir>
. "디렉토리가 비어 있지 않습니다."라는 메시지를받는 하위 디렉토리가있을 수 있으며 유일한 해결책은 다음과 같습니다. 디렉토리를 재귀 적으로 반복하고 포함 된 모든 파일을 수동으로 삭제합니다. 결국 rm
UNIX 의 포트를 사용하기로 결정했습니다 . rm.exe
Git 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
"C : \ Users \ User Name \ OneDrive \ Fonts"가 있는데, "C : \ Windows \ Fonts"에 mklink (/ D)되어 있고 동일한 문제가 발생했습니다. 나의 경우에는
cd "C : \ Users \ 사용자 이름 \ OneDrive"
rd / s 글꼴
Y (동작 확인)
나를 도와 주었다. 나는 그것이 당신에게도 도움이되기를 바랍니다; D
내 경우에는 폴더를 루트 디렉토리로 옮겼습니다.
move <source directory> c:\
그런 다음 명령을 실행하여 디렉토리를 제거하십시오.
rmdir c:\<moved directory> /s /q
rmdir c:\<moved directory> /s /q
정답
Windows는 때때로 "설계에 의해 손상"되므로 빈 폴더를 만든 다음 "빈 폴더"를 백업 모드로 미러링하여 "깨진 폴더"를 미러링해야합니다.
robocopy - cmd copy utility
/copyall - copies everything
/mir deletes item if there is no such item in source a.k.a mirrors source with
destination
/b works around premissions shenanigans
다음과 같이 빈 디렉토리를 만듭니다.
mkdir empty
다음과 같이 빈 폴더로 깨진 폴더를 덮어 씁니다.
robocopy /copyall /mir /b empty broken
그런 다음 해당 폴더를 삭제하십시오.
rd broken /s
rd empty /s
그래도 도움이되지 않으면 다시 시작을 클릭 할 때 Shift 키를 누른 상태에서 복구 모드에서이 명령을 다시 실행하여 "명령 프롬프트가있는 복구 모드"에서 다시 시작해보십시오.
/W:0
불필요한 지연을 피하기 위해 지정할 수 있습니다. /b
관리자 권한이 필요하기 때문에 원하지 않을 수도 있습니다 . 복구 모드는이 질문과 관련이 없습니다. 우리는 디렉토리를 수동으로 제거하려는 사람이 아니라 배치 스크립트에 대해 이야기하고 있기 때문입니다.
가능한 원인은 다음과 같습니다.
1.)의 runas /user:Administrator
경우 더 높은 권한을 얻거나 상황에 맞는 메뉴를 통해 관리자로 배치 파일을 시작하기 위해 시도 할 수 있습니다 . 그래도 도움이되지 않으면 관리자도 권한이 없을 수 있습니다. 그런 다음 디렉토리의 소유권을 인수해야합니다.
2.) 다운로드 프로세스 탐색기의 경우를 클릭 Find/Find handle or DLL...
하거나 누르고 Ctrl+F디렉토리 이름을 입력 한 다음 누가 사용하는지 확인합니다. 가능한 경우 디렉토리를 사용하는 응용 프로그램을 닫습니다.