Supprimer tous les fichiers d'un dossier et de ses sous-dossiers

53

Je veux supprimer tous les fichiers d'une structure de dossiers, il me reste donc une structure de dossiers vide.

Cela peut-il être réalisé en script batch ou VBScript ?

J'ai essayé une commande batch très basique, mais cela nécessitait que l'utilisateur autorise la suppression de chaque fichier. Ce n'était pas une solution appropriée car il y a plusieurs centaines de fichiers et cela augmentera massivement avec le temps.

Que pouvez-vous suggérer?

BobJim
la source
Vous voulez dire une suppression récursive? Cela peut en effet être fait. Quelque chose comme rd /s /q "c:\folder ava effectuer une suppression récursive sur tous les fichiers et dossiers au sein deFolder A
Ramhound
Je pourrais le faire, je ne sais pas comment écrire un script dans PowerShell, mais j'ai déjà utilisé des scripts PowerShell.
BobJim
2
C'est maintenant le moment idéal pour apprendre. Je rechercherais la syntaxe batch et vbs à des fins héritées du passé, mais investirais plus de temps dans l'apprentissage de la PS.
MDMoore313
Je n'ai pas encore eu l'occasion de vérifier le code, même si je suis sûr que cela fonctionnera. Je reviendrai et choisirai la réponse la plus appropriée à ma requête initiale.
BobJim
J'appuie également la recommandation de @ BigHomie - je viens d'apprendre quelques notions de PowerShell et je dois dire que c'est assez soigné - pas trop difficile, une bonne arme dans l'arsenal de tous les codeurs. Je l'utilise assez fréquemment maintenant.
Ben

Réponses:

75

Ceci peut être accompli avec PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Cette commande récupère chaque élément enfant $path, exécute la méthode de suppression sur chacun d'eux et est assez rapide. La structure du dossier est laissée intacte.

Si vous avez des fichiers sans extension, utilisez

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

au lieu.

Il semble que le -Fileparamètre ait été ajouté après PowerShell v2. Si c'est le cas, alors

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Il devrait faire l'affaire pour les fichiers qui ont une extension.

Si cela ne fonctionne pas, vérifiez si vous avez une version à jour de Powershell

MDMoore313
la source
1
Ce n'est -Include *.*pas -Include ., grande différence! :-)
MDMoore313
Get-ChildItem -Path D: \ EmptyThisFolder -Include . -File -Recurse | foreach {$ _. Delete ()}
BobJim
Pourquoi utilisez-vous -Include .?? C'est ça le problème.
MDMoore313
2
Ne peuvent-ils pas mettre en œuvre powershell --version? Ne peuvent-ils pas utiliser un numéro de version avec des chiffres positifs? C'est juste fou. Plus de 1300 votes positifs pour une question sur la façon de trouver le numéro de version d'un programme?
Thomas Weller
1
@demonicdaron n'est pas censé le faire; La question du PO visait à préserver la structure du dossier.
MDMoore313
25

PowerShell court et suite. Je ne sais pas quelle version la plus basse de PS fonctionnera.

Remove-Item c:\Tmp\* -Recurse -Force
Evan Nadeau
la source
2
Nice et facile. Cela a fait l'affaire, contrairement à la réponse acceptée!
Demonicdaron
Cela devrait être la réponse acceptée, vous pouvez même simplement taper rm *car il n’est pas vraiment conseillé de forcer (la boîte de dialogue de confirmation a de toute façon une option "Oui à tout").
J Garcia
22

Vous pouvez le faire avec la delcommande:

dir C:\folder
del /S *

Le /Scommutateur doit supprimer uniquement les fichiers de manière récursive.

phoops
la source
2
Cela supprimera-t-il uniquement les fichiers tout en laissant les dossiers?
BobJim
5
Oui. Vous pouvez ajouter une /Poption pour vous demander de confirmer chaque suppression simplement pour vérifier cela.
phoops
merci de l'essayer! j'espère gagner beaucoup de temps!
BobJim
3
Oui. Et pour supprimer les fichiers cachés et système, faites-le attrib -s -r -h Folder\*.* /s /davant de le supprimer. Et pour les autorisations, utilisez la takeowncommande.
Jet
2
Et vous pouvez utiliser / Q pour ne PAS demander de confirmation lorsque vous utilisez des caractères génériques.
Aylatan
4

En lisant entre les lignes de votre question initiale, je peux vous proposer une autre ligne de code BATCH que vous pouvez utiliser. Lorsque cela sera exécuté, cela ne supprimera que les fichiers de plus de 60 jours. De cette façon, vous pouvez l'insérer dans une tâche planifiée. Lorsqu'il s'exécute, il supprime les fichiers superflus dont vous n'avez pas besoin au lieu de supprimer tout le répertoire. Vous pouvez changer de 60 à 5 jours ou même 1 jour si vous le souhaitez. Cela ne supprime pas les dossiers.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"
Travis
la source
Merci pour l’idée, mais pour le moment je pense que le processus de "vidage" s’achèvera sur un calendrier adhoc très imprévu. Je garderai ce code pour le futur! À la vôtre
BobJim
Le titre indique "Supprimer tous les fichiers d'un dossier et de ses sous-dossiers", ce n'est donc pas une solution.
Anders Lindén
4

Utilisation de PowerShell:

Get-ChildItem -Path c:\temp -Include * | remove-Item -recurse 
Grégory Suvalian
la source
3

Utilisez PowerShell pour supprimer un fichier ou un dossier unique. Avant d'exécuter la commande Supprimer dans PowerShell, nous devons nous assurer que vous êtes connecté au serveur ou au PC avec un compte disposant d'un accès complet aux objets que vous souhaitez supprimer.

Avec Exemple: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Utilisation de commnads PowerShell pour supprimer un fichier

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

La commande ci-dessus exécutera et supprimera le fichier «DummyfiletoDelete.txt» qui se trouve à l’emplacement de «C: \ dotnet-helpers».

Utilisation de commnads PowerShell pour supprimer tous les fichiers

Remove-Item -Path "C: \ dotnet-helpers *. *"

Utilisation de commnads PowerShell pour supprimer tous les fichiers et dossiers

Remove-Item -Path "C: \ dotnet-helpers *. *" -Recurse

-recurseexplore et trouve beaucoup plus de fichiers. Ce –recurseparamètre permettra à PowerShell de supprimer tous les éléments enfants sans demander d’autorisation. De plus, le paramètre –force peut être ajouté pour supprimer les fichiers cachés ou en lecture seule.

Utilisation de la commande -Force pour supprimer des fichiers avec force

Utilisation de la commande PowerShell pour supprimer tous les fichiers avec force

Remove-Item -Path "C: \ dotnet-helpers *. *" -Force

thiyagu selvaraj
la source
1

Essayez ceci avec PowerShell. Dans cet exemple, je souhaite supprimer tous les fichiers .class:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}
Boubakr
la source
1
  1. Dans l'Explorateur Windows, sélectionnez le répertoire racine contenant tous les fichiers et dossiers.

  2. Rechercher *

  3. Trier par type (Tous les dossiers seront en haut et tous les fichiers listés en dessous)

  4. Sélectionnez tous les fichiers et appuyez sur Supprimer.

Cela supprimera tous les fichiers et préservera la structure de répertoires.

Emel
la source
1

Supprimez tous les fichiers du répertoire actuel et des sous-répertoires en laissant la structure des dossiers.

Le /Qcommutateur ( ) sert à demander à l'utilisateur s'il est prêt à supprimer

Attention : essayez-le sans le /Qpour vous assurer de ne rien supprimer de précieux.

del /S * /Q 
Hdoghmen
la source
1

C’est le moyen le plus simple IMO

Ouvrez PowerShell, accédez au répertoire ( cd), ALORS

ls -Recurse * | rm

(Poof) tout est parti ...

Si vous souhaitez supprimer en fonction d'une extension spécifique

ls -Recurse *.docx | rm

ls est la liste du répertoire

-Recurse est un drapeau qui indique à PowerShell d'entrer dans tous les sous-répertoires

* dit tout

*.doc tout avec l'extension .doc

| nourrir la sortie de gauche à droite

rm supprimer

Toutes les autres réponses semblent rendre cela plus déroutant que nécessaire.

Kolob Canyon
la source
0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".
Bertieb
la source
-1

En complément des réponses ci-dessus, il n'est en fait pas nécessaire d'utiliser Get-Childitem et de transmettre le résultat au pipeline dans les réponses ci-dessus, car le mot clé -Include est inclus dans la commande Remove-Item.

On peut simplement:

Remove-Item -Include " . " "C: \ Temp" -Recurse

Sams0nT
la source