41 votes

Comment supprimer des arbres de répertoires via un fichier batch sur Windows 7?

Je veux supprimer tout le contenu d'un dossier spécifié sur Windows 7 via un fichier batch. Mon problème est que 'del' ou 'erase' ne supprime que les fichiers, pas les dossiers et 'rmdir' ou 'rd' supprime toujours le dossier spécifié avec son contenu, mais je veux seulement 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 façon correcte de faire cela?

Je travaille sur Windows 7 Professionnel 64 bits et ai des permissions d'administrateur.

41voto

Windos Points 10851

Votre fichier batch devra exécuter deux commandes, une pour effacer les fichiers, puis une pour supprimer les sous-répertoires. J'ai supposé que le répertoire que vous souhaitez supprimer est C:\Partage\

Le fichier batch devrait ressembler à ceci :

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

del /s /f /q va rechercher de manière récursive dans l'arborescence du répertoire et supprimer tous les fichiers (même les fichiers en lecture seule) sans demander de confirmation.

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

À moins de supprimer le dossier entier et de le recréer (ce que je ne pense pas que vous voulez faire en raison des autorisations?), c'est probablement la manière la plus simple de nettoyer le dossier.

30voto

James Mertz Points 390
rmdir /s/q C:\Share

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

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

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

13voto

acme Points 657

Essayez ceci dans une invite de commande :

rd /s/q "C:\Share"

4voto

Vasilly.Prokopyev Points 223

Qu'en est-il ?

rmdir /S /Q "cible"
mkdir "cible"

ÉDITER: bien sûr, cette solution n'est applicable que lorsque vous pouvez tolérer une absence de dossier momentanée.

2voto

Jim JR Harris Points 21
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 qui contiennent des espaces.

Pour que cela fonctionne, j'ai dû mettre entre guillemets la chaîne finale, comme ceci

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

Apparemment, cela fait en sorte que la commande fonctionne sur la chaîne entre guillemets plutôt que sur la chaîne elle-même.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X