67 votes

Supprimer complètement un dossier dans Windows en utilisant la ligne de commande

Je dois supprimer un dossier contenant d'autres dossiers et fichiers. J'ai essayé del y rmdir mais parfois elles échouent avec des lignes d'erreur : [PATH]: The directory isn't empty.

Existe-t-il une bonne alternative ?

70voto

Fujiy Points 2155

Essayez :

rmdir /S your_directory

ou :

rmdir /S /Q your_directory 

pour sauter les messages de confirmation.

17voto

ScottS Points 5247

Cela m'arrive souvent avec mes scripts de construction automatisée.

Je suppose que la raison pourrait être une application qui a un fichier ouvert dans ce répertoire avec "share delete". C'est-à-dire que l'application permet la suppression du fichier (c'est pourquoi je pense que l'appel DeleteFile n'échoue pas), mais le fichier ne disparaîtra qu'après que ladite application ait fermé son handle.

Cela signifie que le fichier peut encore être présent lorsque le programme rmdir tente de supprimer le dossier, d'où le message d'erreur. Peu de temps après, l'application en question fermera sa poignée, le fichier disparaîtra et, lorsque vous inspecterez le dossier pour voir quel est le fichier qui a été supprimé, le message d'erreur s'affichera. rmdir parlait qu'il sera vide.

Du moins, c'est ma théorie.

La solution de contournement proposée par Harry Johnston semble bonne. Seulement, j'insérerais une pause entre les mots rmdir les commandes. Bien sûr, Windows n'a pas de commande "pause" facilement scriptable (correction : les anciennes versions de Windows n'en ont pas, les plus récentes en ont - voir les commentaires). Mais si la granularité des secondes est suffisante, on peut utiliser la commande ping pour créer une pause :

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Donc, au total :

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

12voto

jackrabbit Points 2990

Vous avez peut-être des fichiers en lecture seule, vous pouvez utiliser l'option del /F pour vous en débarrasser en utilisant

     del /S /F your_directory
     rmdir your_directory

Vous pouvez également avoir des fichiers cachés et si vous êtes vraiment sûr de vouloir les supprimer, vous pouvez le faire à l'aide de la fonction

     del /S /F /AH your_directory
     rmdir your_directory

Si cela échoue toujours, soit vous n'avez pas la permission de supprimer certains fichiers, soit certains de ces fichiers sont encore utilisés.

5voto

Harry Johnston Points 5554

Je crois qu'il y a un bogue dans Windows 7 (et peut-être d'autres versions) qui provoque parfois ce symptôme ; ou il pourrait s'agir d'un bogue dans un logiciel tiers. (Avez-vous Symantec Endpoint Protection installé par hasard ?)

Quoi qu'il en soit, j'ai rencontré ce problème assez souvent. Dans la plupart des cas, le problème peut être contourné en exécutant rd /s /q deux ou trois fois de suite.

Si c'est dans un fichier batch, vous pouvez faire quelque chose comme ceci :

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

3voto

Luke Dennis Points 4805

Utilice del sur les fichiers à l'intérieur, puis rmdir pour supprimer le dossier.

Pour utiliser le rmdir pour supprimer également tous les fichiers, utilisez la méthode /S commutateur avant le nom du répertoire, et /Q pour supprimer l'invite à la suppression. C'est la meilleure façon de procéder, car aucun fichier ne vous échappe. Soyez prudent en utilisant le commutateur /Q cependant, car il ne vous avertira pas des attributs des fichiers système ou cachés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X