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


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"

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.


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.


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"

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^"

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

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

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.



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


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"

0
del .\*

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.