web-dev-qa-db-fra.com

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

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.

34
Michael K

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 effectuera une recherche récursive dans l’arborescence de répertoires en supprimant 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.

34
Windos
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, le développement des caractères génériques est laissé aux programmes individuels, mais pas tous.)

Si vous avez plusieurs répertoires commençant par Share..., utilisez une boucle for.

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

Essayez ceci dans une invite de commande:

rd /s/q "C:\Share"
12
Chau Chee Yang
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

pour/f "delims =" %% f in ('dir/ad/b c:\share \') ne 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.

2
Jim JR Harris

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.

2
Vasilly.Prokopyev

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 dans (*) ne

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

0
Otto Hänninen