2013-01-17 15:33:22 +0000 2013-01-17 15:33:22 +0000
59
59

Supprimer complètement un dossier dans Windows en utilisant 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 quelques lignes d'erreur : [PATH]: The directory isn't empty.

Y a-t-il une bonne alternative ?

Réponses (8)

58
58
58
2013-01-17 15:38:19 +0000

Essayez :

rmdir /S your_directory

ou :

rmdir /S /Q your_directory

pour sauter les messages de confirmation.

16
16
16
2013-07-16 16:23:26 +0000

Cela m'arrive souvent 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 que l'application permet de supprimer le 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 gestionnaire.

Cela signifie que le fichier peut toujours être là lorsque la commande rmdir essaie de supprimer le dossier, d'où le message d'erreur. Peu après, l'application en question fermera son gestionnaire, le fichier disparaîtra et lorsque vous inspecterez le dossier pour voir de quel fichier rmdir il s'agit, il sera vide.

Du moins, c'est ma théorie.

La solution proposée par Harry Johnston semble bonne. Seulement, j'insérerais une pause entre les commandes de rmdir. 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 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}
11
11
11
2013-01-17 16:27:07 +0000

Vous pouvez avoir quelques 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 quelques fichiers cachés et si vous êtes vraiment sûr de vouloir les supprimer, alors vous pouvez le faire en utilisant

del /S /F /AH your_directory
     rmdir your_directory

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

5
5
5
2013-01-17 22:34:36 +0000

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 peut s'agir d'un bogue dans un logiciel tiers. (Avez-vous installé Symantec Endpoint Protection par hasard ?)

Quoi qu'il en soit, je l'ai rencontré 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
3
3
3
2013-01-17 15:36:33 +0000

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

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

2
2
2
2017-12-01 18:08:45 +0000

Si vous utilisez node vous pouvez utiliser la dépendance rimraf comme ceci :

run install: npm install rimraf -g

delete folder: rimraf SourceFolder

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

les noms de fichiers sources sont plus gros que ce qui est supporté par le système de fichiers

0
0
0
2015-11-16 14:47:29 +0000

Je pense que vous pouvez l'utiliser comme suit :

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"
0
0
0
2016-06-24 18:30:12 +0000

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 batch, mais ça va très 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.