2010-08-09 16:42:36 +0000 2010-08-09 16:42:36 +0000
43
43

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

Je souhaite supprimer tous les fichiers et sous-dossiers d'un fichier de lot sous Windows 7 et conserver le dossier supérieur. Il s'agit en fait de vider le dossier. Quelle est l'instruction de la ligne de commande pour cela ?

回答 (11)

54
54
54
2010-08-09 16:46:23 +0000

Vous pouvez le faire en utilisant del et le drapeau /S (pour lui dire de supprimer tous les fichiers de tous les sous-répertoires) :

del /S C:\Path\to\directory\*
23
23
23
2013-10-05 04:44:01 +0000

La meilleure solution : par exemple, je veux supprimer tous les fichiers et sous-répertoires du répertoire parent, disons “C:\Users\Desktop\NNNNNouveau dossier”. La méthode la plus simple consiste à créer un fichier par lot de trois commandes.

cd C:\Users\Desktop\Nouveau dossier\

del * /S /Q

rmdir /S /Q “C:\Users\Desktop\NNouveau dossier\”

Ici, il va d'abord nettoyer tous les fichiers de tous les sous-répertoires, puis il va nettoyer tous les sous-répertoires vides. Comme le répertoire de travail actuel est le répertoire parent, c'est-à-dire “\NNNNouveau dossier”, la commande rmdir ne peut pas supprimer ce répertoire lui-même.

9
9
9
2014-07-03 12:38:29 +0000

Naviguer vers le répertoire parent :

pushd "Parent Directory"

Supprimer les sous-répertoires :

rd /s /q . 2>nul
6
6
6
2015-04-27 07:21:36 +0000

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

rmdir /s/q MyFolderPath

Cependant, c'est beaucoup plus rapide, surtout si 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
5
5
5
2013-07-31 18:23:00 +0000
rmdir "c:\pathofyourdirectory" /q /s

N'oubliez pas d'utiliser les guillemets et pour le /q /s, il supprimera tous les dépôts et ce, sans qu'on vous le demande.

3
3
3
2014-02-05 16:39:49 +0000

Si vous voulez supprimer tous les fichiers d'un dossier, y compris tous les sous-dossiers, et ne pas vous fier à certaines conditions d'erreur pour garder le dossier racine intact (comme je l'ai vu dans une autre réponse), vous pourriez avoir un fichier batch comme ceci :

@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 alors vous l'appelleriez simplement avec :

empty_my_folder.bat "C:\whatever\is\my folder"
3
3
3
2017-02-02 19:20:53 +0000

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
1
1
1
2016-11-10 17:16:53 +0000

Pour supprimer un fichier :

del PATH_TO_FILE

Pour supprimer un dossier avec tous les fichiers qu'il contient :

rmdir /s /q PATH_TO_FOLDER

Pour supprimer tous les fichiers d'un dossier spécifique (sans supprimer le dossier lui-même), c'est un peu compliqué. del /s *.* ne peut pas supprimer les dossiers, mais supprime les fichiers de tous les sous-dossiers. Deux commandes sont donc 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%

Exemple d'utilisation :

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
1
1
1
2014-02-13 18:06:34 +0000

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

)
0
0
0
2020-02-17 22:41:30 +0000

user340956 était douloureusement proche de la solution, mais vous savez ce qu'on dit de proche…

Pour être clair, rd /s /q c:\foobar supprime le répertoire cible en plus de son contenu, mais vous ne voulez pas toujours supprimer le répertoire lui-même, parfois vous voulez juste supprimer son contenu et laisser le répertoire tranquille. La commande deltree pouvait le faire, mais Micrsoft, dans son infinie “sagesse” a supprimé la commande et ne l'a pas portée sur Windows.

Voici une solution qui fonctionne sans avoir recours à des outils tiers. Elle est probablement aussi simple et efficace que possible avec un script en ligne de commande au lieu d'écrire un véritable exécutable. Il ne définit aucune variable d'environnement et n'utilise aucune boucle. Il est aussi aussi sûr que possible, avec une vérification des erreurs partout où c'est possible, et aussi convivial que possible, avec des documents intégrés.

dt.bat (ou dt.cmd pour les enfants ; peu importe, je suis vieux, j'utilise .bat ) :

:: dt is a Windows-compatible version of the deltree command
:: Posted to SuperUser by Synetech: https://superuser.com/a/1526232/3279

@echo off
goto start

:start
    if ["%~1"]==[""] goto usage
    pushd "%~1" 2>nul
    if /i not ["%cd%"]==["%~1"] goto wrongdir
    rd /s /q "%~1" 2>nul
    popd
goto :eof

:usage
    echo Delete all of the contents of a directory
    echo.
    echo ^> %0 DIR
    echo.
    echo %0 is a substitute for deltree, it recursively deletes the contents
    echo (files and folders) of a directory, but not the directory itself
    echo.
    echo DIR is the directory whose contents are to be deleted
goto :eof

:wrongdir
    echo Could not change to the target directory. Invalid directory? Access denied?
goto :eof

Voici comment il fonctionne :

  1. Il vérifie si un argument de ligne de commande a été passé, et imprime les informations d'utilisation et quitte si ce n'est pas le cas.
  2. Il utilise pushd pour sauvegarder le répertoire courant, puis passe au répertoire cible, redirigeant les erreurs éventuelles vers nul pour une expérience en ligne de commande plus propre (et des journaux plus propres).
  3. Il vérifie si le répertoire courant est maintenant le même que le répertoire cible, et imprime un message d'erreur et quitte si ce n'est pas le cas. Cela permet d'éviter de supprimer accidentellement le contenu du répertoire précédent si la commande pushd a échoué (par ex, )
  4. Cette vérification n'est pas sensible à la casse, donc elle est généralement sûre sous Windows, mais ne l'est pas pour les systèmes de fichiers sensibles à la casse comme ceux utilisés par les systèmes *nix, même sous Windows.
  5. Elle ne fonctionne pas avec les noms de fichiers courts (par exemple C:\Users\Bob Bobson\foobar ne sera pas considéré comme étant identique à C:\Users\BobBob~1\foobar même s'ils le sont réellement). C'est un léger inconvénient de devoir utiliser le nom de fichier non court, mais il vaut mieux prévenir que guérir, d'autant plus que les SFN ne sont pas complètement fiables ou toujours prévisibles (et peuvent même être complètement désactivés).
  6. Il utilise ensuite rd pour supprimer le répertoire cible et tout son contenu, en redirigeant les éventuelles erreurs (qui devraient être au moins une pour le répertoire lui-même) vers nul. Quelques remarques à ce sujet :
  7. Comme le répertoire cible est le répertoire courant, le système a un gestionnaire de fichiers ouvert vers lui, et donc il ne peut pas le supprimer réellement, il reste donc tel quel, ce qui est le comportement souhaité.
  8. Parce qu'il n'essaie pas de supprimer le répertoire cible avant que son contenu n'ait été supprimé, il devrait maintenant être vide (à l'exception de tout ce qui a également un gestionnaire de fichiers ouvert).
  9. Enfin, il utilise popd pour revenir au répertoire courant précédent et termine le script.

(Si vous le souhaitez, vous pouvez commenter le script avec les descriptions ci-dessus en utilisant rem ou ::.)

0
0
0
2018-05-07 18:43:18 +0000

C'est ce qui a fonctionné pour moi.

  1. Naviguez dans le dossier où vous voulez supprimer les fichiers.
  2. Tapez : del *
  3. Y pour oui.
  4. Fait