web-dev-qa-db-fra.com

Supprimer complètement un dossier dans Windows à l'aide de la ligne de commande

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?

52
Francesco Zanini

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}
15
Paul Groke

Essayer:

rmdir /S your_directory

ou:

rmdir /S /Q your_directory 

ignorer les messages de confirmation.

51
AndrewQ

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.

11
sgmoore

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
4
Harry Johnston

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.

3
Canadian Luke

Si vous utilisez node vous pouvez utiliser le rimraf dependency comme ceci:

lance l'installation: npm install rimraf -g

supprimer un dossier: rimraf SourceFolder

Cela m'a aidé à obtenir l'erreur:

les noms de fichier source sont plus grands que ceux pris en charge par le système de fichiers

2
Dustin Spengler

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.
0
Sun