source

배치 스크립트에서 rmdir 명령을 실행할 때 "디렉토리가 비어 있지 않습니다" 오류를 해결하는 방법

myloves 2023. 4. 8. 10:17

배치 스크립트에서 rmdir 명령을 실행할 때 "디렉토리가 비어 있지 않습니다" 오류를 해결하는 방법

배치 스크립트를 만들고 있는데, 이 스크립트의 일부가 디렉토리와 그 서브 디렉토리를 모두 삭제하려고 합니다.서브 디렉토리가 비어 있지 않다는 에러가 간헐적으로 발생합니다.인덱스가 범인이라는 기사를 읽었어요.WSearch를 비활성화했는데 다시 오류가 발생하였습니다.명령어는 다음과 같습니다.

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

해리 존스턴 rmdir /s /q 있지 /s★★★★★★★★★★★★★★★★★★★★★★★★★★!「Windows」의 「Windows」의 「Windows」.

은 ★★★★★★★★★★★★★★★★★★★★★★★★」del디렉토리 자체를 삭제하기 전에, 디렉토리의 모든 것을 확인합니다.

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

(the)1>nul 출력을 숨깁니다.의 .del그렇지 않으면 삭제한 모든 파일이 나열됩니다.)

나는 이 문제를 잘 알고 있다.가장 간단한 회피책은 조건부로 작업을 반복하는 것입니다.실제로 열려 있는 파일이나 권한 문제가 없는 한 두 번 연속 실패하는 경우는 본 적이 없습니다.

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

방금 같은 문제가 발생했는데 일부 파일이 손실되거나 손상된 것과 관련이 있습니다.문제를 해결하려면 체크 디스크를 실행하십시오.

chkdsk /F e:

이 작업은 검색 창 상자 또는 cmd 프롬프트에서 실행할 수 있습니다./F파일 복구와 같은 발견된 모든 문제를 해결합니다.실행이 완료되면 일반 파일 및 폴더를 삭제할 수 있습니다.

명령 프롬프트를 Admin으로 입력하고 실행합니다.

rmdir /s <FOLDER>

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

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

@@gfullam @BoffinbraiN @BoffinbraiN @BoffinbraiN @ @BoffinbraiN @ @입니다.<dir>하는 것 되어 있지 수 .「삭제하다」에 서브 디렉토리가 가 있습니다.서브 디렉토리가 있는 경우<dir>「디렉토리가 비어 있지 않다」라고 하는 메세지가 표시되고, 유일한 해결책은, 디렉토리상에서 반복해, 그 모든 파일을 수동으로 삭제하는 것입니다.나는 결국 항구를 사용하기로 결정했다.rmUNIX " " " " rm.exeGit Bash, MinGW, Cygwin, GnuWin32는 GnuWin32를 사용합니다.PATH에 부모 디렉토리를 가지고 UNIX 시스템과 같이 실행하기만 하면 됩니다.

배치 스크립트의 예:

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

내 경우 이렇게 root 디렉토리로 폴더를 옮겼습니다.

move <source directory> c:\

그리고 명령어를 실행하여 디렉토리를 삭제했습니다.

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

'C:'가 있었어요\Users\사용자명\원드라이브\폰트'는 mklink' ( /D )에서 "C:"로 표기되어 있습니다.\Windows\'글꼴'도 같은 문제가 발생했어요.저 같은 경우에는

cd "C:\Users\User Name\"원드라이브"

rd/s 글꼴

Y(액션을 확인하기 위해)

날 도와줬어너에게도 도움이 되었으면 좋겠어;D

나에게 효과가 있었던 것은 다음과 같다.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

★★rd /s가 특정 파일 삭제를 거부한 것은 디렉토리 내의 파일에 있는 READ ONLY 파일 속성 때문일 가능성이 높습니다.

이 문제를 해결하는 적절한 방법은 먼저 모든 파일의 속성을 리셋하는 것입니다.

attrib -r %directory% /s /d
rd /s %directory%

숨김 파일이나 시스템 파일과 같은 다른 파일이 있을 수 있으므로 안전하게 재생하려면 다음 절차를 따릅니다.

attrib -h -r -s %directory% /s /d
rd /s %directory%

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

다음과 같이 빈 dir를 만듭니다.

mkdir empty

깨진 폴더를 다음과 같이 빈 폴더로 덮어씁니다.

robocopy /copyall /mir /b empty broken

그런 다음 해당 폴더를 삭제합니다.

rd broken /s
rd empty /s

그래도 문제가 해결되지 않으면 restart를 클릭할 때 shift 키를 누른 상태에서 복구 모드에서 이러한 명령을 다시 실행하여 "명령 프롬프트를 사용한 복구 모드"로 재시작해 보십시오.

라이너 1개:

if exist folder rmdir /Q /S folder

다음과 같이 NPM 스크립트로 사용하고 있습니다(Javascript).

//package.json
  "scripts": {
    "start": "parcel --no-cache",
    "clean": "if exist dist rmdir /Q /S dist",
    "deploy": "npm run clean && parcel build --no-source-maps && firebase deploy"
  },

관리자로 CMD 열기

chkdsk c: /F /R
  • 다음 번에 시스템을 재부팅할 때 디스크를 확인하라는 메시지가 표시되면 "Y" 키를 누릅니다.

머신을 재기동합니다.그런 다음 폴더를 삭제하십시오.

생각할 수 있는 원인은 다음과 같습니다.

  1. 더 높은 권한이 필요한 파일 또는 하위 디렉터리가 있습니다.
  2. WSearch 뿐만 아니라 바이러스 스캐너나 다른 어떤 것에 의해서도 사용되고 있는 파일이 있습니다.

1 1.을(를) 시험해 볼 수.runas /user:Administrator더 높은 권한을 얻거나 컨텍스트메뉴에서 관리자 권한으로 배치파일을 기동합니다.그래도 문제가 해결되지 않으면 관리자라도 권한이 없을 수 있습니다.그런 다음 디렉토리의 소유권을 넘겨받아야 합니다.

2.) 프로세스 탐색기를 다운로드하려면Find/Find handle or DLL...또는 를 눌러 디렉토리 이름을 입력하고 사용하는 사용자를 확인합니다.가능한 경우 디렉토리를 사용하는 응용 프로그램을 닫습니다.

Harry Johnston의 대답과 비슷하게, 나는 효과가 있을 때까지 반복한다.

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

디렉토리 강제 삭제(존재하는 경우)

Delete.bat

set output_path="C:\Temp\MyFolder"
    
if exist %output_path% (
   echo Deleting %output_path%
   attrib -r /s /d %output_path%
   rd /s /q %output_path%
)

삭제하려는 디렉토리 이름에 여분의 공백이 없는지 확인하기 전에 이 문제를 수정했습니다.전달처의 변수내에 디렉토리명이 포함되어 있는 경우, 이것은 더욱 염려가 됩니다.RD따옴표로 직접 지정하는 경우는 도움이 되지 않지만, 저와 같은 사람이 같은 문제를 안고 와서 봐 주셨으면 합니다. RD /S /Q문제가 발생하기 시작한 것은 배치 스크립트에서 무언가를 변경했기 때문입니다.

가장 쉬운 방법은 다음과 같습니다.

rm -rf dir_name

zsh - macOS에서 동작하며 Windows cmd에서도 동작합니다.

WindowsPowerShell을 사용합니다.이 방법은 다음과 같습니다.

rmdir .\directory_name\ -Recurse

언급URL : https://stackoverflow.com/questions/22948189/how-to-solve-the-directory-is-not-empty-error-when-running-rmdir-command-in-a