371 votes

Comment supprimer des fichiers/sous-dossiers dans un répertoire spécifique à l'invite de commande sous Windows ?

Disons qu'il y a une variable appelée %pathtofolder% car il est clair qu'il s'agit du chemin complet d'un dossier.

Je veux supprimer chaque fichier et sous-dossier de ce répertoire, mais pas le répertoire lui-même.

Mais il peut y avoir une erreur du type "ce fichier/dossier est déjà utilisé"... dans ce cas, il doit simplement continuer et ignorer ce fichier/dossier.

Existe-t-il une commande pour cela ?

0 votes

0 votes

C'est fou comme Windows rend difficile la suppression des dossiers... Ou d'en créer un qui commence par un point... Dieu merci pour l'intégration de Bash dans Windows ! rm -rf path\to\folder fonctionne sous Windows 10 (ou pourrait provenir de Git Bash... de toute façon, si vous l'avez, cela vaut la peine d'essayer !)

410voto

Suresh Points 545

rmdir est ma commande préférée pour ce travail. Elle fonctionne pour la suppression d'énormes fichiers et de dossiers avec des sous-dossiers. Une sauvegarde n'est pas créée, donc assurez-vous que vous avez copié vos fichiers en toute sécurité avant de lancer cette commande.

RMDIR "FOLDERNAME" /S /Q

Cette opération supprime silencieusement le dossier et tous les fichiers et sous-dossiers.

76 votes

Cela semble supprimer le pathtofolder que le PO voulait conserver.

5 votes

Cela supprimerait le dossier lui-même, vous devrez donc ajouter une autre commande : md FOLDERNAME (voir la réponse de @rakoczyn ci-dessous).

4 votes

Que voulez-vous dire par "la sauvegarde est créée" ici ? Je ne vois rien qui puisse créer une quelconque sauvegarde...

293voto

Iain Points 2472

Vous pouvez utiliser ce shell script pour nettoyer le dossier et les fichiers à l'intérieur de C:\Temp source :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Créez un fichier batch (disons, delete.bat) contenant la commande ci-dessus. Allez à l'endroit où se trouve le fichier delete.bat, puis exécutez la commande : delete.bat

21 votes

J'ai essayé mais malheureusement les fichiers ne sont pas supprimés, seuls les sous-dossiers sont supprimés. Par exemple, j'ai un dossier nommé Test. Il contient 2 dossiers nommés "Ripon" et "Wasim" et un fichier nommé "riponalwasim.txt". Les sous-dossiers Ripon et Wasim ont été supprimés mais riponalwasim.txt n'a pas été supprimé.

19 votes

Utilisez un seul signe de pourcentage si vous souhaitez exécuter directement à partir de la ligne de commande, par ex. %p

2 votes

C'est triste que cela prenne 2 lignes, mais au moins ça marche ! Je suis fatigué de chercher un "one-liner" qui fonctionne et je vais utiliser celui-ci, merci !

90voto

rakoczyn Points 417

La solution la plus simple à laquelle je pense est de supprimer le répertoire entier avec

RD /S /Q folderPath

Puis en créant à nouveau ce répertoire :

MD folderPath

5 votes

Que se passe-t-il si vous autorisez la suppression mais pas la création de nouveaux dossiers ? J'espère que c'est possible :)

14 votes

C'est une mauvaise solution, car elle introduit une course sur le système de fichiers pour le nœud du répertoire, c'est-à-dire que la deuxième commande peut échouer si elle est exécutée immédiatement après.

23 votes

Aussi, mauvaise solution si le répertoire a des permissions spéciales que vous venez de supprimer. ahem (Oups)

57voto

foxidrive Points 19298

Cela supprimera les dossiers et les fichiers et laissera le dossier derrière.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)

5 votes

Pour ceux qui ne sont pas sûrs de cette approche : elle ne recrée absolument pas le répertoire. Sans 2>nul le message "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus".

8 votes

Je déteste que Windows ne puisse pas supprimer les fichiers et dossiers utilisés par un programme. Et j'adore que tu utilises ça en ta faveur dans cette phrase.

2 votes

Cette super-magie est donc la façon dont on vide un dossier dans Windows ? Impressionnant :)

4voto

Ripon Al Wasim Points 5161

Vous pouvez le faire en utilisant la commande suivante pour supprimer tous les contenus et le dossier parent lui-même :

RMDIR [/S] [/Q] [drive:]path

1 votes

En quoi cela est-il différent des deux réponses précédentes ?

0 votes

Cette réponse répond-elle à l'exigence "il peut y avoir une erreur du genre 'ce fichier/dossier est déjà utilisé'... quand cela se produit, il doit juste continuer et ignorer ce fichier/dossier". ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X