web-dev-qa-db-fra.com

Lot - Obtenir "Le répertoire n'est pas vide" avec la commande rmdir

Je fais un script batch et une partie du script essaie de supprimer un répertoire et tous ses sous-répertoires. Je reçois une erreur intermittente à propos d'un sous-répertoire qui n'est pas vide. J'ai lu un article sur l'indexation étant le coupable. J'ai désactivé WSearch mais j'ai finalement eu à nouveau l'erreur.

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

J'ai rencontré les mêmes problèmes que ceux mentionnés par Harry Johnston. rmdir /s /q se plaindrait qu'un répertoire n'était pas vide même si /s est destiné à vider le contenu pour vous! Je pense que c'est un bug dans Windows, personnellement.

Ma solution consiste à del tout ce qui se trouve dans le répertoire avant de le supprimer:

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

(Le 1>nul masque la sortie standard de del car sinon, il répertorie chaque fichier supprimé.)

55
BoffinbraiN

Je connais ce problème. La solution de contournement la plus simple consiste à répéter conditionnellement l'opération. Je ne l'ai jamais vu échouer deux fois de suite - à moins qu'il y ait un fichier ouvert ou un problème d'autorisations, évidemment!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
36
Harry Johnston

Je viens de rencontrer le même problème et cela concernait la perte ou la corruption de certains fichiers. Pour corriger le problème, lancez simplement check disk:

chkdsk /F e:

Cela peut être exécuté à partir de la fenêtre de recherche ou d'un invite cmd. Le /F corrige tous les problèmes rencontrés, tels que la récupération des fichiers. Une fois que cela est terminé, vous pouvez supprimer les fichiers et les dossiers comme d'habitude.

16
jrose

entrez l'invite de commande en tant qu'administrateur et exécutez

rmdir /s <FOLDER>
9
Adilson Cabral

J'avais "C:\Utilisateurs\Nom d'utilisateur\OneDrive\Fonts", qui était mklink'ed (/ D) en "C:\Windows\Fonts" et j'avais le même problème. Dans mon cas

cd "C:\Utilisateurs\Nom d'utilisateur\OneDrive"

rd/s Polices

Y (to confirm the action)

m'a aidé. J'espère que cela vous aide aussi; D

3
Maciej Bl

Comme @gfullam a déclaré dans un commentaire à la réponse de @ BoffinbraiN, le <dir> que vous supprimez lui-même peut ne pas être celui qui contient des fichiers: il peut y avoir des sous-répertoires dans <dir> qui reçoivent un message "Le répertoire n'est pas vide" et la seule solution être récursivement itérer sur les répertoires, supprimant manuellement tous leurs fichiers contenant ... J'ai fini par décider d'utiliser un port de rm de UNIX. rm.exe est fourni avec Git Bash, MinGW, Cygwin, GnuWin32 et d’autres. Vous devez simplement avoir son répertoire parent dans votre PATH, puis l'exécuter comme vous le feriez dans un système UNIX.

Exemple de script batch:

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

J'ai eu un problème similaire, essayé de supprimer un dossier vide via l'Explorateur Windows. M'a montré l'erreur pas vide, alors j'ai pensé l'essayer via admin cmd, mais aucune des réponses ici n'a aidé 

Après avoir déplacé un fichier dans le dossier vide. J'ai pu supprimer le dossier non vide

2
Grisu118

Ce qui a fonctionné pour moi est le suivant. J'apparais comme si la commande RMDir émettait presque tout le temps "Le répertoire n'est pas vide" ...

: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
1
user7432246

Dans mon cas, je viens de déplacer le dossier dans le répertoire racine, comme ça.

move <source directory> c:\

Et puis a exécuté la commande pour supprimer le répertoire

rmdir c:\<moved directory> /s /q
0
Daniel Barde

Je peux penser aux causes possibles suivantes:

  1. il existe des fichiers ou des sous-répertoires qui nécessitent des autorisations plus élevées
  2. il y a des fichiers en cours d'utilisation, non seulement par WSearch, mais peut-être par votre scanner de virus ou autre chose

Pour 1.), vous pouvez essayer runas /user:Administrator afin d’obtenir des privilèges plus élevés ou de lancer le fichier de commandes en tant qu’administrateur via le menu contextuel. Si cela ne vous aide pas, même l'administrateur n'a peut-être pas les droits. Ensuite, vous devez prendre en charge la propriété du répertoire.

Pour 2.) télécharger Process Explorer , cliquez sur Find/Find handle or DLL... ou appuyez sur Ctrl+F, tapez le nom du répertoire et découvrez qui l’utilise. Fermez l'application qui utilise le répertoire, si possible.

0
Thomas Weller

Semblable à la réponse de Harry Johnston, je boucle jusqu'à ce que cela fonctionne. 

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