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.
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.
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"
Essayez ceci dans une invite de commande:
rd /s/q "C:\Share"
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.
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.
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