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.
rd /s /q /path/to/foo
md /path/to/foo
del /f /s /q DirectoryWhichContainsFilesToDelete/\*
Cela supprimera tous les fichiers du dossier DirectoryWhichContainsFilesToDelete
sans supprimer le dossier lui-même . Amusez-vous :)
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.
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
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).
Essayez d'utiliser Powershell:
powershell -Command "Remove-Item '\foo\*' -Recurse -Force"
deltree/foo/* devrait fonctionner correctement.
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
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."