Comment supprimer des arborescences de répertoires via un fichier de commandes sous Windows 7?


33

Je souhaite supprimer tout le contenu d'un dossier spécifié sous Windows 7 via un fichier de commandes. Mon problème est que «del» ou «effacer» ne supprime que les fichiers, pas les dossiers et que «rmdir» ou «rd» supprime toujours le dossier spécifié avec son contenu, mais que je souhaite uniquement supprimer le contenu, pas le dossier lui-même. . J'ai essayé la commande ' rmdir /S /Q "C:\Share\*" 'qui m'a donné une erreur de syntaxe.

Quelle est la bonne façon de faire cela?

Je travaille sur Windows 7 Professional 64 bits et dispose des autorisations d'administrateur.

Réponses:


34

Votre fichier de commandes devra exécuter deux commandes, une pour effacer les fichiers, une autre pour supprimer les répertoires enfants. J'ai supposé que le répertoire que vous souhaitez supprimer est C:\Share\

Le fichier de commandes doit ressembler à ceci:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q va rechercher de manière récursive dans l’arborescence de répertoires la suppression de tous les fichiers (même les fichiers en lecture seule) sans demander de confirmation.

La deuxième ligne parcourt tous les sous-répertoires (qui devraient maintenant être vides) et les supprime.

À part supprimer et recréer l'intégralité du dossier (ce que je ne pense pas que vous souhaitiez faire en raison d'autorisations?), Cela devrait constituer le moyen le plus simple de nettoyer le dossier.


Si je fais une petite correction ici "pour / f %% f" - & gt; "pour / f% f" alors cela fonctionne très bien :) Merci beaucoup.
Michael K

6
del n'est pas nécessaire. rd/s/q supprimera les fichiers et les sous-dossiers.
grawity

1
@grawity le del est principalement présent pour tous les fichiers du dossier racine, pourrait toutefois supprimer le commutateur de récursivité.
Windos

5
@MichaelK, %% f est destiné à être utilisé dans des fichiers de commandes,% f lorsqu'il s'agit d'une seule commande directement à la ligne de commande.
Windos

1
Si l’un des noms de sous-répertoires contient des espaces, vous pouvez ajouter "delims =" pour les traiter correctement (pour / f "delims =" %% f in ...): voir stackoverflow.com/q/5553040/64918
goldPseudo

26
rmdir /s/q C:\Share

Vous obtenez une "erreur de syntaxe" car rmdir accepte uniquement les noms complets, pas les caractères génériques. (Dans cmd.exe, l’expansion des caractères génériques est laissée aux programmes individuels; tous ne le font pas.)

Si vous avez plusieurs annuaires commençant par Share..., utiliser un for boucle.

for /d %f in (C:\Share*) do rmdir /s/q "%f"

2
Je ne veux pas supprimer le dossier partagé.
Michael K


2

Qu'en est-il de ?

rmdir /S /Q "target"
mkdir "target

EDIT: cette solution ne s'applique bien entendu que lorsque vous pouvez tolérer une absence momentanée du dossier.


Cela supprimerait le dossier d'origine.
Michael K

@MichaelK Ma tâche était capable de tolérer une absence momentanée du dossier, alors je suis allé avec cette solution. Je pensais que c'était plus simple et plus lisible que for /f dans des cas similaires au mien. Je voulais juste partager
Vasilly.Prokopyev

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Cela ne fonctionne pas si les sous-répertoires contiennent d'autres répertoires contenant des espaces.

Afin de faire ce travail, j'avais besoin de citer la dernière chaîne, comme ceci

for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q  "c: \ share \ %% f" 

Apparemment, cela oblige la commande à travailler sur la chaîne citée au lieu de la chaîne elle-même.


0

Je voudrais essayer ceci dans le dossier où tous les sous-dossiers doivent être supprimés mais la racine (et les fichiers dans la racine) laissés tels quels: pour / D% v in (*) do rd / s / q% v

pour / D correspond aux répertoires et rd / s / q supprime chacun à la fois

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.