Comment puis-je supprimer tous les fichiers / sous-dossiers d'un dossier donné via l'invite de commande?

42

Je souhaite supprimer tous les fichiers et sous-dossiers d'un fichier de commandes dans Windows 7 et conserver le dossier principal. Essentiellement, vider le dossier. Quelle est l'instruction en ligne de commande pour cela?

Tony_Henrich
la source
3
Pas à nitpick, mais vous cherchez comment faire "à partir de l'invite de commande" pas à partir de "DOS". Il n'y a pas eu de sous-système DOS depuis Win ME.
MDMarra
@MarkM: Eh bien, il y a / était, ntvdmmais à mesure que les systèmes 64 bits gagnent des parts de marché, cela devient de moins en moins pertinent.
Joey

Réponses:

55

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

del /S C:\Path\to\directory\*
MDMarra
la source
2
Votre vaut mieux: D +1 - Supprimé ma réponse
BloodPhilia
3
Explication: del signifie Suppr et S signifie Récursif.
Tamara Wijsman
3
@Tony_Henrich, En savoir plus sur les commandes msdos ici. computerhope.com/msdos.htm
Moab
3
et / Q conserve des sous-dossiers vides, ce qui n’est pas souhaitable.
Tony_Henrich
3
C'est la mauvaise réponse et je ne sais pas pourquoi il a reçu beaucoup de votes positifs. Il semble que les gens n'aient pas bien compris la question et ne lisent pas les commentaires! Je vais parcourir les réponses et choisir la bonne.
Tony_Henrich
22

La meilleure solution: par exemple, je veux supprimer tous les fichiers et sous-répertoires du répertoire parent, disons "C: \ Utilisateurs \ Bureau \ Nouveau dossier \". Le moyen le plus simple est de créer un fichier de commandes composé de trois commandes.

cd C: \ Utilisateurs \ Bureau \ Nouveau dossier \

del * / S / Q

rmdir / S / Q "C: \ Utilisateurs \ Bureau \ Nouveau dossier \"

Ici, tout d'abord, tous les fichiers de tous les sous-répertoires seront nettoyés, puis tous les sous-répertoires vides seront nettoyés. Le répertoire de travail actuel étant le répertoire parent, à savoir "\ Nouveau dossier", la commande rmdir ne peut pas supprimer ce répertoire lui-même.

Annasaheb
la source
1
Fonctionne très bien, sauf un avertissement lorsque le système ne peut pas supprimer le dossier racine.
Jerther
2
Pas bon. Chemins codés en dur et en le regardant, il ne vide pas le dossier. Ça l'enlève. Très dangereux aussi. Il supprime les fichiers du dossier actuel si le chemin ne se ferme pas ou est mal orthographié.
Tony_Henrich
1
Comme @Tony_Henrich a dit que la rmdircommande va supprimerNew folder
Nuktu
Cela fonctionne en fait pour effacer complètement le "Nouveau dossier" sans supprimer le dossier lui-même. Le seul problème est qu'il donne un avertissement mineur lorsque le système d'exploitation ne parvient pas à supprimer le dossier parent. De plus, la commande del est redondante sauf si vous avez un dossier volumineux, auquel cas cela pourrait être plus rapide. Vous pouvez simplement le modifier en tant que tel (Désolé pour le manque de sauts de ligne dans les commentaires): set FOLDER = "% userprofile% \ Desktop \ New folder" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke
3
Vraiment dangereux. Si quelqu'un continue et supprime / renomme `C: \ Users \ Desktop \ New folder`, la toute première ligne avec CD échoue et votre fichier de commandes supprime avec bonheur tout le contenu du répertoire actuel (par défaut). Ce qui pourrait très bien finir par être votre répertoire de travail ou votre répertoire de travail ou C: \ Windows \ System32
Ishmaeel
9

Accédez au répertoire parent:

pushd "Parent Directory"

Supprimer les sous-dossiers:

rd /s /q . 2>nul
utilisateur340956
la source
1
Wow, c'est hackish. :)
Tarnay Kálmán
1
Ceci est essentiellement équivalent à deux réponses précédentes.
Scott
Convenu ci-dessus - il s'agit d'une copie des réponses précédentes, remplacées par des commandes identiques à celles qu'elles remplacent. pushdn'ajoute rien ici qui cdne soit pas déjà fait.
Hashim
C’est le seul que j’ai pu utiliser jusqu’à présent qui fonctionne exactement pour ce que le demandeur demandait. Tous les autres suppriment simplement tous les fichiers. Bien sûr rmdir /s path-to-folder, le dossier contenant tous les éléments qu'il contient sera supprimé, mais le demandeur voulait savoir comment supprimer tout le contenu du répertoire de travail.
Katz_Katz_Katz
Cette réponse a fonctionné le mieux pour moi. Avec toutes les autres réponses, il ne supprimait pas les répertoires non vides lors de l’utilisation de / Q et demandait toujours confirmation lorsqu’il n’utilisait pas / Q.
marijnr
5
rmdir "c:\pathofyourdirectory" /q /s

N'oubliez pas d'utiliser les guillemets et pour le /q /ssupprimer tous les référentiels et sans le demander.

SuperUtilisateur
la source
2
La question était "Je voudrais supprimer tous les fichiers et sous-dossiers d'un fichier batch dans Windows 7 et conserver le dossier principal. "
Werner Henze
5

vous pouvez utiliser rmdir pour supprimer les fichiers et les sous-dossiers, comme ceci:

rmdir /s/q MyFolderPath

Cependant, cela est beaucoup plus rapide, surtout quand vous avez beaucoup de sous-dossiers dans votre structure pour utiliser del avant le rmdir, comme ceci:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
Einbert Alshtein
la source
La première option donne une erreur "le répertoire n'est pas vide". La première commande de la deuxième option supprime tout le dossier. Ça ne le garde pas comme je le voulais. La deuxième commande n'est pas nécessaire si la première commande supprimait tout le dossier.
Tony_Henrich
La rmdircommande (les deux sont identiques) supprimera le dossier parent. Ce n'est pas une réponse à la question. Pourquoi les gens ne lisent pas?
Hashim
3

Si vous souhaitez supprimer tous les fichiers d'un dossier, y compris tous les sous-dossiers, sans vous fier à certaines conditions d'erreur pour conserver le dossier racine intact (comme je l'ai vu dans une autre réponse), vous pouvez obtenir un fichier de traitement de ce type:

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

Et ensuite, vous l'appeleriez simplement avec:

empty_my_folder.bat "C:\whatever\is\my folder"
Gio
la source
3

Vous pouvez le faire rapidement et facilement en mettant ces trois instructions dans votre fichier bat:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
sang-de-feu
la source
Ceci est extrêmement utile car il supprime également tous les fichiers cachés ou système.
Affaiblissement
1

Cela fonctionnait mieux pour moi lorsque j'avais des espaces dans les noms de dossiers.

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo *** Deleting all files, including the ones in the subdirs, without confirmation *** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\."  (
    echo *** Cleaning out folder: %~1 *** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)
Ed Hammond
la source
Les gens oublient toujours de laisser des espaces dans les noms.
Kevin Panko
1

Pour supprimer le 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 (ne pas supprimer le dossier lui-même) est un peu compliqué. del /s *.*ne peut pas supprimer des 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
0

C'est ce qui a fonctionné pour moi.

  1. Naviguez dans le dossier où vous souhaitez supprimer les fichiers.
  2. Type: del *
  3. Y pour oui.
  4. Terminé
Erv
la source