Je dois supprimer un dossier contenant d'autres dossiers et fichiers à l'intérieur. J'ai essayé les commandes del
et rmdir
mais parfois elles échouent avec certaines lignes d'erreur: [PATH]: The directory isn't empty.
Y a-t-il une bonne alternative?
Cela m’arrive beaucoup avec mes scripts de construction automatisés.
Je suppose que la raison pourrait être une application qui a un fichier ouvert dans ce répertoire avec "share delete". C'est à dire. l'application permet une suppression du fichier (c'est pourquoi je suppose que l'appel DeleteFile n'échoue pas), mais le fichier ne disparaîtra que lorsque ladite application aura fermé son descripteur.
Cela signifie que le fichier est peut-être toujours présent lorsque la commande rmdir
tente de supprimer le dossier, d'où le message d'erreur. Peu de temps après, ladite application fermera son pseudo, le fichier disparaîtra et lorsque vous inspecterez le dossier pour voir quel fichier rmdir
en parlait, il sera vide.
Au moins c'est ma théorie.
La solution de contournement proposée par Harry Johnston semble bonne. Seulement, je voudrais insérer une pause entre les commandes rmdir
. Bien entendu, Windows ne dispose pas de commande "pause" facilement scriptable (correction: les anciennes versions de Windows ne le sont pas, les plus récentes ont - voir les commentaires). Mais si la granularité en secondes est suffisante, vous pouvez utiliser 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}
Essayer:
rmdir /S your_directory
ou:
rmdir /S /Q your_directory
ignorer les messages de confirmation.
Vous pouvez avoir 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 en utilisant
del /S /F /AH your_directory
rmdir your_directory
Si le problème persiste, vous n'êtes pas autorisé à supprimer certains fichiers ou certains fichiers sont toujours en cours d'utilisation.
Je crois qu'il y a un bogue dans Windows 7 (et peut-être dans d'autres versions) qui provoque parfois ce symptôme; ou cela pourrait être un bogue dans un logiciel tiers. (Symantec Endpoint Protection est-il installé par hasard?)
Quoi qu'il en soit, je l'ai rencontré assez souvent. Dans la plupart des cas, le problème peut être résolu en exécutant rd /s /q
deux ou trois fois à la suite.
Si cela se trouve dans un fichier de commandes, 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
Utilisez del
sur les fichiers qu'il contient, puis rmdir
pour supprimer le dossier.
Pour que la méthode rmdir
supprime également tous les fichiers, utilisez le commutateur /S
before le nom du répertoire et /Q
pour supprimer les invites de suppression. C’est la meilleure façon de le faire, car vous ne manquez aucun fichier. Soyez prudent en utilisant le commutateur/Q, car il ne vous avertira pas des attributs de fichier système ou cachés.
Dossier des anciennes versions de Windows (DOS, Windows 95/98/ME), DELTREE
est l’équivalent de RM
ou RMDIR
. J'utilise DELTREE
sur mon poste de travail Windows 7 dans des fichiers de commandes, mais tout va bien.
Deletes a directory and all the subdirectories and files in it.
To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]
/Y Suppresses prompting to confirm you want to delete
the subdirectory.
[drive:]path Specifies the name of the directory you want to delete.
Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.