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.

Michael K
la source

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.

Windos
la source
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"
grawity
la source
2
Je ne veux pas supprimer le dossier partagé.
Michael K
12

Essayez ceci dans une invite de commande:

rd /s/q "C:\Share"
Chau Chee Yang
la source
1
Ce dossier parent supprimé également, pas le contenu du dossier.
Teoman shipahi
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.

Vasilly.Prokopyev
la source
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.

Jim JR Harris
la source
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

Otto Hänninen
la source