web-dev-qa-db-fra.com

Comment supprimer des fichiers de manière récursive

J'ai la structure de répertoire/foo/bar/fooBar/... Je veux écrire une commande Windows dans laquelle je peux mentionner le chemin jusqu'au répertoire foo et supprimer tous les fichiers et le répertoire de manière récursive dans/foo, mais il ne faut PAS supprimer le répertoire foo.

J'utilisais rmdir /q /s [path to foo] mais cette commande supprime également le répertoire foo. Faites-moi savoir s'il y a des commandes pour accomplir cela.

33
Akshay
rd /s /q /path/to/foo
md /path/to/foo
46
Ferruccio
del /f /s /q DirectoryWhichContainsFilesToDelete/\*

Cela supprimera tous les fichiers du dossier DirectoryWhichContainsFilesToDelete sans supprimer le dossier lui-même . Amusez-vous :)

9
Libish Jacob

Je me suis aussi gratté la tête. Il est assez facile de créer une boucle for qui utilise rmdir, mais laisse des dossiers contenant des espaces dans les noms longs. Il est possible de manipuler une liste de répertoires et d’obtenir les noms de fichiers 8.3, mais voici une solution beaucoup plus simple.

Créez un dossier vide puis;

robocopy \empty_folder \folder_with_sub_folders /PURGE

Tous les sous-dossiers et fichiers seront supprimés.

6
Neil
del X /f /s /q 
rd X /s /q 

cela supprimera le répertoire ROOt cependant. refaire le avec

 md X

ou faites-en une copie en premier.

sinon vous devrez faire de la folie par lots

 dir X /ad /b

vous donnera une liste des sous-répertoires immédiats de X. vous pouvez travailler le reste

5
user1743310

Je cherchais une commande simple pour supprimer tous les fichiers d'un répertoire de manière récursive, tout en laissant la structure de répertoires inchangée. Alors, peut-être que cela pourrait être intéressant;)

for /f "delims=" %i in ('dir /B /S /A:-DH') do @del /F /Q /A:H "%i"

La commande 'dir/B/S/A: -D' ne répertorie que les fichiers (/ A: -D) du répertoire en cours de manière récursive (/ S) sans le rapport de synthèse 'dir' (/ B). Le 'for' parcourt chaque ligne complète (/ delims =) et exécute la commande de suppression forcée et silencieuse. J'ai également utilisé l'indicateur caché (/ H) à la fois pour la liste et la suppression de certains fichiers mystérieux (par exemple, thumbs.db).

3
fup

Essayez d'utiliser Powershell:

powershell -Command "Remove-Item '\foo\*' -Recurse -Force"
2
Rosberg Linhares

deltree/foo/* devrait fonctionner correctement.

2
Dan Paradox

Je l'ai utilisé dans un fichier de commandes dans le passé. Il utilise une boucle for pour parcourir la structure de répertoires.

Ici, je supprime les sous-répertoires cvs de l’arborescence, nécessaires lors de la copie d’une branche à une autre.

@echo off
if /I exist CVS. rd CVS /s /q >nul
for /F %%z in ('dir cvs /ad /s /b') do echo %%z && rd /s /q %%z
echo Batchfile %0 is complete
1
Jim Cubbage Jr

Pour empêcher la suppression du répertoire foo, essayez de changer de répertoire en foo avant la suppression, par exemple:

cd c:\foo rd/s/q c:\foo

Cela supprimera tous les fichiers et dossiers sous foo mais PAS foo. Un message d'erreur s'affichera comme suit "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus."

0
user7415858