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>\"
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é.)
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
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.
entrez l'invite de commande en tant qu'administrateur et exécutez
rmdir /s <FOLDER>
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
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>"
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
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
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
Je peux penser aux causes possibles suivantes:
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.
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
)