Comment supprimer tous les fichiers et dossiers dans un dossier par appel cmd

89

J'utilise Windows.

Je souhaite supprimer tous les fichiers et dossiers d'un dossier par appel système.

Je peux appeler comme ça:

>rd /s /q c:\destination
>md c:\destination

Connaissez-vous un moyen plus simple?

ufukgun
la source
Copie
Rosberg Linhares

Réponses:

137

Non, je n'en connais pas.

Si vous souhaitez conserver le répertoire d'origine pour une raison quelconque (ACL, etc.), et que vous voulez vraiment le vider, alors vous pouvez faire ce qui suit:

del /q destination\*
for /d %x in (destination\*) do @rd /s /q "%x"

Cela supprime d'abord tous les fichiers du répertoire, puis supprime de manière récursive tous les répertoires imbriqués, mais dans l'ensemble, en conservant le répertoire de niveau supérieur tel quel (à l'exception de son contenu).

Notez que dans un fichier de commandes, vous devez doubler le %contenu de la forboucle:

del /q destination\*
for /d %%x in (destination\*) do @rd /s /q "%%x"
Joey
la source
3
j'ai pu le faire sans fichier batch. utilisez le && pour concater les deux opérations
Matt Broekhuis
1
Je suis un noob Windows-Shell complet: comment définir la destination sur un chemin avec cet exemple?
low_rents
Vous remplacez le mot destinationpar le chemin, éventuellement en utilisant des guillemets autour du tout si nécessaire.
Joey
4
Cette réponse me rend triste, car c'est la meilleure réponse
KCD
1
@stenci: La deuxième ligne ne peut supprimer que le répertoire donné. Il le fait de manière récursive, en effet, mais il ne peut pas supprimer un fichier. Par conséquent, pour supprimer tout ce qui se trouve dans un répertoire, vous devez supprimer tous les fichiers et tous les répertoires. Notez qu'il ne s'agit pas de supprimer un seul répertoire et tout ce qu'il contient. Il s'agit de supprimer tout ce qu'il contient et de conserver le répertoire parent.
Joey
39

del c:\destination\*.* /s /qtravaillé pour moi. J'espère que cela fonctionne aussi pour vous.

Sean
la source
13
Supprime tous les fichiers mais pas les dossiers.
Eric
2
Ce qui a fonctionné pour moi, c'est de naviguer vers le dossier. (Maj clic droit, sélectionnez l'invite cmd ouverte ici) puisdel *.*
Daniel L. VanDenBosch
exemple de chemin relatifdel "../../server/front-end\*.*"
FindOutIslamNow
@ DanielL.VanDenBosch, ce n'est pas très scriptable.
Synetech le
29

Je pense que le moyen le plus simple de le faire est:

rmdir /s /q "C:\FolderToNotToDelete\"

Le dernier "\" du chemin est la partie importante.

Banan
la source
27
Cela supprime également le dossier lui-même.
Archie
Parfait, c'est ce dont j'ai besoin :)
gNerb
Est-ce que cela fonctionne récursivement quel est le chemin trop long?
eomeroff le
2
combiner cela avec mkdir C:\FolderToNotToDeleteme suffisait :)
qbolec
1
Cela peut être problématique si votre dossier parent (qui est supprimé de cette façon) détient des autorisations importantes, que vous devez maintenant recréer ...
Mladen B.
15

Oui! Utilisez Powershell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"
Rosberg Linhares
la source
Dommage que PowerShell soit une bête encombrante, gonflée et très lente. : - |
Synetech le
13

Si les noms de sous-dossiers peuvent contenir des espaces, vous devez les entourer de guillemets d'échappement. L'exemple suivant montre cela pour les commandes utilisées dans un fichier de commandes.

set targetdir=c:\example
del /q %targetdir%\*
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^"
fracteur
la source
6

Pour supprimer un fichier:

del PATH_TO_FILE

Pour supprimer un dossier contenant tous les fichiers:

rmdir /s /q PATH_TO_FOLDER

Supprimer tous les fichiers d'un dossier spécifique (sans supprimer le dossier lui-même) est un peu compliqué. del /s *.*ne peut pas supprimer les dossiers, mais supprime les fichiers de tous les sous-dossiers. Donc, deux commandes sont nécessaires:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Vous pouvez créer un script pour supprimer ce que vous voulez (dossier ou fichier) comme ceci mydel.bat:

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%

Quelques exemples d'utilisation:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Maxim Suslov
la source
1

Une option simple sur une ligne consiste à créer un répertoire vide quelque part sur votre système de fichiers, puis à utiliser ROBOCOPY( http://technet.microsoft.com/en-us/library/cc733145.aspx ) avec le /MIRcommutateur pour supprimer tous les fichiers et sous-dossiers. Par défaut, robocopy ne copie pas la sécurité, les ACL de votre dossier racine doivent donc rester intactes.

Vous souhaitez probablement également définir une valeur pour le commutateur de nouvelle tentative /r, car le nombre de tentatives par défaut est de 1 million.

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3
BateTech
la source
0

J'avais un dossier d'index avec 33 dossiers qui nécessitaient tous les fichiers et sous-dossiers supprimés. J'ai ouvert une ligne de commande dans le dossier d'index, puis j'ai utilisé ces commandes:

for /d in (*) do rd /s /q "%a" & (
md "%a")

Je les ai séparés en deux lignes (appuyez sur Entrée après la première ligne, et lorsqu'on vous demande plus d'ajouter la deuxième ligne), car si elles sont entrées sur une seule ligne, cela peut ne pas fonctionner. Cette commande effacera chaque répertoire puis en créera un nouveau qui est vide, supprimant ainsi tous les fichiers et sous-dossiers du répertoire d'origine.

Ynotinc
la source
0

Cela prend 2 étapes simples. [/ q signifie silencieux, / f signifie forcé, / s signifie sous-répertoire]

  1. Videz le répertoire à supprimer

    del *.* /f/s/q  
    
  2. Supprimer le répertoire

    cd ..
    rmdir dir_name /q/s
    

Voir l'image

Feuille de Jenna
la source
0

essayez ceci, cela recherchera tout MyFolder sous le répertoire racine et supprimera tous les dossiers nommés MyFolder

for /d /r "C:\Users\test" %%a in (MyFolder\) do if exist "%%a" rmdir /s /q "%%a"
Shailesh Tiwari
la source
0
del .\*

Cette commande supprime tous les fichiers et dossiers de la navigation actuelle dans votre ligne de commande.

Yuvraj Hinger
la source