Fichier batch. Supprimer tous les fichiers et dossiers d'un répertoire

135

Je souhaite avoir un fichier de commandes qui supprimera tous les dossiers et fichiers de mon dossier cache pour ma boîte à outils sans fil.

Actuellement, j'ai ce qui suit:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Cela supprimera tous les fichiers .db de mon répertoire RMS , mais je souhaite supprimer chaque élément de ce répertoire. Comment puis-je faire ceci?

user69514
la source
3
Tapez del /?à l'invite. Il vous donnera des informations sur la façon d'utiliser l'outil. Dans ce cas, del *.* /scela fonctionnerait mais ne le faites pas dans le mauvais répertoire!
Michael Todd
35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir
Je suggérerais par les votes ascendants de changer la bonne réponse
GregM
5
La réponse de forsvarir supprime également le RMSrépertoire, ce qui n'est peut-être pas ce qui était prévu. (En fait, c'est souvent ce que je ne veux pas , car je perds alors l'horodatage d'origine du répertoire et toutes les autorisations qu'il avait.) Voir ma réponse pour savoir comment supprimer tout le contenu d'un répertoire mais laisser le répertoire lui-même dans endroit.
Bill_Stewart

Réponses:

51

del *.*au lieu de del *.db. Cela supprimera tout.

Jon Martin
la source
56
Remarque: Si vous voulez contourner l'invite "Êtes-vous sûr de vouloir supprimer ...", vous devrez ajouter les indicateurs / FQ:del . /F /Q
Rhyuk
41
cela ne supprime que les fichiers - pas les dossiers
icc97
52
Cela ne doit pas être marqué comme la bonne réponse car cela ne supprime pas les dossiers (comme indiqué dans la question).
Bill_Stewart
158

Utilisation:

  • Créer un fichier batch

  • Copiez le texte ci-dessous dans le fichier de commandes

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Il supprimera tous les fichiers et dossiers.

GregM
la source
4
Génial, je cherchais quelque chose pour nettoyer les fichiers et les dossiers pour un travail par lots mensuel et cela a fait l'affaire.
Dave Harding
9
Assurez-vous que le répertoire existe avant de faire cela.
Bill_Stewart
2
Si vous avez des caractères `` spéciaux '' dans vos noms de fichiers, commencez chcp 10000par changer le codage en UTF-16
Demelziraptor
3
Je veux juste ajouter une note au commentaire de Bill_Stewart. La raison pour laquelle vous voulez vous assurer que le répertoire existe est que sinon, il effacera le répertoire dans lequel vous vous trouvez actuellement. Dans mon cas, c'était le fichier batch sur lequel je travaillais depuis plus de 30 minutes. : (Heureusement que le reste du dossier était sous contrôle de code source.
helios456
2
@vee change la boucle en (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) pour supprimer les messages d'erreur et de suppression
Carl Walsh
34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Cela supprimera tout du dossier (et le dossier lui-même).

infojolt
la source
13
Je pense que la question est de vider le répertoire de tout le contenu, mais pas de supprimer le répertoire lui-même.
Bill_Stewart
16

del *.*supprimera uniquement les fichiers, mais pas les sous-répertoires. Pour détruire le contenu d'un répertoire, vous pouvez utiliser ce script:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

Les pushdmodifications dans le répertoire dont vous souhaitez supprimer les enfants. Ensuite, quand on rddemande de supprimer le répertoire courant et tous les sous-répertoires, la suppression des sous-répertoires réussit, mais la suppression du répertoire courant échoue - car nous y sommes. Cela produit une erreur qui 2> NULavale. (2 étant le flux d'erreur).

Bill_Stewart
la source
6
Je me suis demandé exactement comment cela fonctionnait pendant un petit moment, donc comme une explication pour les autres: Le pushd change dans le répertoire dont vous voulez supprimer les enfants. Ensuite, lorsque rd demande de supprimer le répertoire courant et tous les sous-répertoires, la suppression des sous-répertoires réussit, mais la suppression du répertoire courant échoue - car nous y sommes. Cela produit une erreur que 2> NUL avale. (2 étant le flux d'erreur). Très rusé Mr Stewart!
Kinetic
Oh, et "setlocal enableextensions" active la possibilité de pousser simultanément le répertoire courant sur la pile et de changer de répertoire. Cela ne semble être requis qu'avant XP, car là et plus tard, il est de toute façon activé par défaut.
Kinetic
Pouvez-vous intégrer les informations des commentaires dans la réponse (les commentaires peuvent disparaître à tout moment)? ( Sans utiliser les étiquettes "Edit:" "Update:" .)
Peter Mortensen
12

Je viens de mettre cela ensemble à partir de ce que morty346 a publié:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Il ajoute une vérification rapide que le dossier défini dans la variable existe en premier, change de répertoire dans le dossier et supprime le contenu.

Fantus_Longhorn
la source
2
Donc, petite astuce - si vous essayez de l'exécuter sur un chemin réseau, même avec l'instruction "IF EXIST", il ne parviendra pas à définir le dossier et une instruction sera enregistrée dans l'invite cmd "Chemins UNC non pris en charge, par défaut à répertoire windows "alors il tentera de supprimer tout ce qui se trouve dans votre répertoire Windows. Donc sois prudent.
CBRF23
11

Vous pouvez le faire en utilisant delet le /Sdrapeau (pour lui dire de récurer tous les fichiers de tous les sous-répertoires):

del /S C:\Path\to\directory\*

La commande RD peut également être utilisée. Supprimer de manière récursive silencieusement sans invite:

@RD /S /Q %VAR_PATH%

Rmdir (rd)

PodTech.io
la source
5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)
Cristian Tetic
la source
3

Essayez ce qui suit; ça marche pour moi.

J'ai une application qui vide les données dans mon dossier "C: \ tmp", et ce qui suit fonctionne le mieux pour moi. Il ne demande même pas Oui ou Non pour supprimer les données. J'ai fait un calendrier pour qu'il s'exécute toutes les 5 minutes

cd "C:\tmp"

del *.* /Q
pauvre
la source
7
Si le dossier "C: \ tmp" n'est pas présent (si vous ou une autre application avez supprimé ce dossier) et si vous essayez d'exécuter celui-ci, ne supprimera-t-il pas les données de l'autre dossier dans "C: \"? (C'est arrivé avec moi)
Vikram
4
Comme le note Vikram: 1) Ceci est très dangereux et 2) cela ne supprime pas les sous-répertoires comme indiqué dans la question.
Bill_Stewart
2
En plus des dossiers, vous pouvez le faire del /q c:\tmp\*.*, ce qui est environ un million de fois plus sûr. Sans parler du cdchangement de chemin, pas de lecteur.
Nyerguds
1
C'est un conseil terrible. Comme d'autres l'ont mentionné, vous pouvez finir par purger autant de données essentielles à la suite de cela. Signalé pour suppression, je pense que c'est si mauvais.
RyanfaeScotland
2

Mieux encore, disons que je veux tout supprimer sous le C:\windows\tempdossier.

@echo off
rd C:\windows\temp /s /q
user3788752
la source
11
Cela supprime le répertoire c:\windows\temp. Je ne pense pas que c'était ce que la question initiale posait.
Bill_Stewart
Supprimer le répertoire me semble le plus simple et si je dois le recréer par la suite, je le peux. Un problème pourrait être la perte des autorisations de dossier spécial. Cependant, cela semble beaucoup plus facile que la plupart des autres réponses.
madannes
1
Malheureusement, la suppression et la recréation immédiate à partir du script batch semblent donner des erreurs aléatoires "d'accès refusé", sur Win10 ...
Nyerguds
2

Vous pouvez utiliser robocopy pour mettre en miroir un dossier vide dans le dossier que vous effacez.

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

Cela fonctionne également si vous ne pouvez pas supprimer ou recréer le dossier réel.

Il nécessite un répertoire vide existant.

Aaron
la source
1
Selon l'aide de robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).je suis donc assez sûr que /Ec'est redondant.
Nyerguds le
2

Utilisation

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Cette version supprime sans demander:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Exemple:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Cela sera clair C:\foo1\foo\foo\foo3.

(Je voudrais mentionner la réponse d'Abdullah Sabouin . Il y a eu une confusion au sujet de ma copie. Je n'ai pas remarqué son message. Je tiens à remercier melpomene d' avoir signalé des erreurs!)

TravieDude Minecraft et plus
la source
Cela ne marche pas du tout. rmdir fooerreurs si ce foon'est pas un répertoire vide.
melpomene
@melpomene J'ai trouvé l'erreur et ça devrait être corrigé !!
TravieDude Minecraft and More
1
Je ne voulais en aucun cas copier @Abdullah Sabouni. Je n'ai pas dû remarquer cela. Je suis désolé.
TravieDude Minecraft and More
@melpomene J'ai énoncé mon erreur et mon point de vue sur ce qui s'est passé. Mais j'ai décidé de ne pas supprimer au cas où cela aiderait de toute façon. Merci d'avoir fait remarquer cela.
TravieDude Minecraft and More
@TravieDudeMinecraftandMore +1 - a également fonctionné pour moi.
Guy Avraham
0

Vous ne pouvez pas tout supprimer avec l'un rmdirou l' autre ou delseul:

  • rmdir /s /qn'accepte pas les paramètres génériques. Il en rmdir /s /q *sera de même pour l'erreur.
  • del /s /f /q supprimera tous les fichiers, mais les sous-répertoires vides resteront.

Ma solution préférée (comme je l'ai utilisée dans de nombreux autres fichiers batch) est:

rmdir /s /q . 2>NUL
butfly
la source
0

Juste une version modifiée de la réponse GregM :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.
grenix
la source
-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Vous étiez sur la bonne voie. Ajoutez simplement du code pour ajouter le dossier qui est à nouveau supprimé.

Abdullah Sabouni
la source
1
Je ne recommande pas cette solution car elle supprime le répertoire (perdant ainsi ses autorisations) et le recrée (éventuellement avec des autorisations différentes).
Bill_Stewart
-3

Vous devez exécuter cette commande afin de supprimer tous les fichiers:

del*.*
David Naranjo Hernandez
la source
6
Identique à la réponse acceptée du 26 juillet 2011 à 21:04. N'ajoutez pas de réponse lorsque vous n'avez rien de nouveau.
Stephan
2
En plus de la critique valide de @Stephan, la commande doit être del *.*(avec un espace)
Ty Hitzeman