Comment supprimer des fichiers / sous-dossiers dans un répertoire spécifique à l'invite de commandes dans Windows

308

Disons, il existe une variable appelée %pathtofolder%, car elle indique clairement qu'il s'agit du chemin complet d'un dossier.

Je souhaite supprimer tous les fichiers et sous-dossiers de ce répertoire, mais pas le répertoire lui-même.

Mais, il pourrait y avoir une erreur comme «ce fichier / dossier est déjà utilisé» ... lorsque cela se produit, il devrait simplement continuer et ignorer ce fichier / dossier.

Y a-t-il une commande pour cela?

Deniz Zoeteman
la source
Copie
Rosberg Linhares
Il est fou de voir à quel point Windows rend difficile la suppression de dossiers ... Ou d'en créer un qui commence par un point ... Dieu merci pour l'intégration de Bash dans Windows! rm -rf path\to\folderfonctionne dans Windows 10 (ou pourrait provenir de Git Bash ... de toute façon si vous avez que ça vaut la peine d'essayer!)
Stijn de Witt

Réponses:

256

Vous pouvez utiliser ce script shell pour nettoyer le dossier et les fichiers dans la C:\Temp source :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Créez un fichier de commandes (par exemple, delete.bat) contenant la commande ci-dessus. Accédez à l'emplacement où se trouve le fichier delete.bat, puis exécutez la commande: delete.bat

Iain
la source
20
J'ai essayé mais malheureusement les fichiers n'étaient pas supprimés, seuls les sous-dossiers sont supprimés. Par exemple, j'ai un dossier nommé Test. Il contient 2 dossiers nommés "Ripon" et "Wasim" et il contient un fichier nommé "riponalwasim.txt". Les sous-dossiers Ripon et Wasim ont été supprimés mais riponalwasim.txt n'a pas été supprimé.
Ripon Al Wasim
16
Utilisez un signe de pourcentage unique si vous souhaitez exécuter directement à partir de la ligne de commande, par exemple%p
Alex
2
Dommage que cela prenne 2 lignes, mais au moins ça marche! Je suis fatigué de chercher un "one-liner" et j'irai avec celui-ci, merci!
Nightcoder
2
Vous pouvez utiliser l'opérateur '&&' pour exécuter deux commandes sur une seule ligne sans fichier de chauve-souris (notez un seul '%' au lieu de '%%'). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q
ravinsp
<for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> pourrait aider pour les fichiers (il suffit de supprimer cet écho)
grenix
340

rmdir est ma commande préférée de tous les temps pour le travail. Il fonctionne pour supprimer des fichiers et des dossiers énormes avec des sous-dossiers. Aucune sauvegarde n'est créée, assurez-vous donc d'avoir copié vos fichiers en toute sécurité avant d'exécuter cette commande.

RMDIR "FOLDERNAME" /S /Q

Cela supprime silencieusement le dossier et tous les fichiers et sous-dossiers.

Suresh
la source
65
Cela semble supprimer le chemin d'accès au dossier que l'OP souhaitait conserver.
Fuzz Evans
4
Cela supprimerait le dossier lui-même, vous devrez donc ajouter une autre commande: md FOLDERNAME(voir la réponse de @rakoczyn ci-dessous).
thdoan
4
Que voulez-vous dire par "sauvegarde est créée" ici? Je ne vois rien qui pourrait créer une sorte de sauvegarde ...
Paul Groke
1
Le répertoire n'est pas vide Le message est venu comme réponse!
Jamshaid Kamran
10
Afin de ne pas supprimer le dossier lui-même, faites-en le répertoire courant avant, puis utilisez "." comme FOLDERNAME. La recréer par la suite n'est pas nécessairement la même, car les listes de contrôle d'accès pourraient être perdues. cd "FOLDERNAME" RD . /S /Q
Moritz Both
85

La solution la plus simple à laquelle je pense est de supprimer tout le répertoire avec

RD /S /Q folderPath

Ensuite, créez à nouveau ce répertoire:

MD folderPath
wojciech_rak
la source
5
que faire si vous autorisez la suppression mais pas la création de nouveaux dossiers ?? J'espère que c'est possible :)
Sandy
13
C'est une mauvaise solution, car elle introduit une course sur le système de fichiers pour le nœud de répertoire, c'est-à-dire que la deuxième commande peut échouer si elle est exécutée immédiatement après.
Rok Strniša
22
En outre, mauvaise solution si le répertoire a des autorisations spéciales, vous venez de détruire ahem (whoops)
Immortal Blue
Ne vous laissez pas rebuter par la réponse: 'Le répertoire n'est pas vide.', Émettez simplement la commande deux fois :-)
Kieran Ryan
1
RD et RMDIR sont la même commande et puisque vous avez posté cette réponse 9 mois après que quelqu'un ait dit la même réponse, pourquoi les gens vous donnent-ils des points?
Changer
51

Cela supprimera les dossiers et les fichiers et laissera le dossier derrière.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)
Foxidrive
la source
4
Pour ceux qui ne sont pas sûrs de cette approche: il ne recrée définitivement pas le répertoire. Sans 2>nul, il affiche "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus."
Rok Strniša
6
Je déteste que Windows ne puisse pas supprimer les fichiers et dossiers utilisés par certains programmes. Et j'adore que vous l'ayez utilisé en votre faveur dans ce one-liner.
andref
Donc, cette uber-magic est de savoir comment vider un dossier dans Windows ?? Impressionnant :)
mlvljr
3
@mlvljr Uniquement si vous souhaitez également conserver le dossier parent. RD /?vous montrera le moyen simple de vider un dossier.
foxidrive
1
C'est bien si vous devez revenir à votre point de départ, sinon CD mypath && RD /S .cela suffirait tout simplement . Je n'aime pas que vous deviez répéter votre chemin deux fois cependant, pour les longs chemins, il devient difficile à lire. Je voudrais donc simplement ajouter un set p="mypath"au début.
Amit Naidu
39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... supprime tous les fichiers et dossiers sous le répertoire donné, mais pas le répertoire lui-même.

thepip3r
la source
4
cela devrait être la bonne réponse .. faites simplement simple .. fichier deletemyfoldercontents.bat .. sautez sur votre chemin et cela fonctionne comme un charme ..
timbrown
3
La ligne de commande DEL manque l'option /Ade supprimer également les fichiers avec un ensemble d'attributs cachés et %dir%\*doit être placée entre guillemets, comme "%dir%\*"pour fonctionner également pour les répertoires contenant un espace ou l'un de ces caractères &()[]{}^=;!'+,`~. Et la ligne de commande FOR doit être modifiée en for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"car FOR ignore les répertoires avec un ensemble d'attributs masqués. DIR avec options /AD /Baffiche tous les répertoires avec uniquement leurs noms. BTW: dirn'est pas un bon nom pour une variable d'environnement.
Mofi
1
ne supprime pas le sous-dossier
RMiranda
1
@RMiranda, dans mes tests, il fait exactement ce que l'OP a demandé. Avez-vous un cas où il ne supprime pas les sous-dossiers?
thepip3r
Est-ce que cette réponse répond à l'exigence "il pourrait y avoir une erreur comme" ce fichier / dossier est déjà en cours d'utilisation "... lorsque cela se produit, il devrait simplement continuer et ignorer ce fichier / dossier." ?
Peter Mortensen
30
CD [Your_Folder]
RMDIR /S /Q .

Vous obtiendrez un message d'erreur, vous indiquant que la commande RMDIR ne peut pas accéder au dossier actuel, donc elle ne peut pas le supprimer.

Mise à jour :

À partir de ce commentaire utile (merci à Moritz Both ), vous pouvez ajouter &&entre, donc RMDIRne s'exécutera pas si la CDcommande échoue (par exemple, nom de répertoire mal saisi):

CD [Your_Folder] && RMDIR /S /Q .

Depuis la référence de la ligne de commande Windows :

/ S: supprime une arborescence de répertoires (le répertoire spécifié et tous ses sous-répertoires, y compris tous les fichiers).

/ Q: spécifie le mode silencieux. Ne demande pas de confirmation lors de la suppression d'une arborescence de répertoires. (Notez que / q ne fonctionne que si / s est spécifié.)

O.Badr
la source
1
C'est parfait pour vider le temp, mais c'est cd [Your_Folder]super critique - je dois m'en souvenir pour ne pas supprimer le répertoire lui-même ...
sage
5
C'est la bonne solution. Ajoutez &&entre les commandes au lieu du saut de ligne et vous êtes à l'abri d'un CD défaillant.
Moritz Both
Il s'agit d'une solution simple et correcte. Fonctionne même avec le shell de commande Azure!
Philippe
assez mauvaise solution ... J'ai par exemple besoin de cette suppression de ligne de commande pour une mise à jour svn - je veux supprimer tous les fichiers et dossiers avant de faire la mise à jour svn car il peut y avoir des changements sur la machine où j'utilise ceci, mais pertinent ne sont que les éléments enregistrés. Faire RMDIR / S / Q. supprime également le lien SVN et ne fait donc plus du dossier un dossier svn
Dominik Lemberger
En quoi est-ce différent des quatre réponses précédentes?
Peter Mortensen
9

RD signifie REMOVE Directory.

/ S: supprime tous les fichiers et sous-dossiers en plus du dossier lui-même. Utilisez-le pour supprimer une arborescence de dossiers entière.

/ Q: Silencieux - n'affiche pas la confirmation YN

Exemple :

RD /S /Q C:/folder_path/here
Sireesh Yarlagadda
la source
1
a voté pour être le seul à expliquer ce /Sque cela /Qsignifie
SourceVisor
2
No. rdéquivaut rmdiret supprimera le répertoire lui-même et n'est pas ce que OP souhaite.
WesternGun
Est-ce que cette réponse répond à l'exigence "il pourrait y avoir une erreur comme" ce fichier / dossier est déjà utilisé "... lorsque cela se produit, il devrait simplement continuer et ignorer ce fichier / dossier."? Par exemple, abandonne-t-il complètement au lieu de continuer?
Peter Mortensen
8

J'utilise Powershell

Remove-Item c:\scripts\* -recurse

Il supprimera le contenu du dossier, pas le dossier lui-même.

rhellem
la source
La réponse de Rhellem est récente, mais c'est la seule réponse qui me permettra de le faire. (Win 8.1, pas par choix)
philologon
2
Depuis la ligne de commande batch:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares
Notez que le "*" est nécessaire ou il supprimera le dossier.
mhenry1384
7

Aucune des réponses publiées le 2018-06-01, à l'exception de la ligne de commande unique publiée par foxidrive , n'a vraiment supprimé tous les fichiers et tous les dossiers / répertoires de %PathToFolder%. C'est la raison de publier une réponse de plus avec une seule ligne de commande très simple pour supprimer tous les fichiers et sous-dossiers d'un dossier ainsi qu'un fichier de commandes avec une solution plus complexe expliquant pourquoi toutes les autres réponses publiées le 2018-06-01 en utilisant DEL et FOR avec RD n'a pas réussi à nettoyer complètement un dossier.


La solution simple de ligne de commande unique qui bien sûr peut également être utilisée dans un fichier batch:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

Cette ligne de commande contient trois commandes exécutées l'une après l'autre.

La première commande PUSHD pousse le chemin du répertoire actuel sur la pile et fait ensuite%PathToFolder% le répertoire actuel pour l'exécution du processus de commande.

Cela fonctionne également pour les chemins UNC par défaut car les extensions de commande sont activées par défaut et dans ce cas PUSHD crée une lettre de lecteur temporaire qui pointe vers cette ressource réseau spécifiée, puis modifie le lecteur et le répertoire actuels, en utilisant la lettre de lecteur nouvellement définie.

PUSHD affiche le message d'erreur suivant pour gérer STDERR si le répertoire spécifié n'existe pas du tout:

Le système ne peut pas trouver le chemin spécifié.

Ce message d'erreur est supprimé en le redirigeant 2>nulvers le périphérique NUL .

La prochaine commande RD n'est exécutée que si le changement du répertoire en cours pour le processus de commande en cours vers le répertoire spécifié a réussi, c'est-à-dire que le répertoire spécifié existe.

La commande RD avec les options /Qet /Ssupprime discrètement un répertoire avec tous les sous - répertoires même si le répertoire spécifié contient des fichiers ou des dossiers avec un attribut masqué ou avec un ensemble d'attributs en lecture seule. L'attribut système n'empêche jamais la suppression d'un fichier ou d'un dossier.

Les éléments non supprimés sont:

  1. Dossiers utilisés comme répertoire courant pour tout processus en cours d'exécution. L'arborescence de dossiers complète d'un tel dossier ne peut pas être supprimée si un dossier est utilisé comme répertoire actuel pour tout processus en cours d'exécution.

  2. Fichiers actuellement ouverts par tout processus en cours d'exécution avec des autorisations d'accès aux fichiers définies sur le fichier ouvert pour empêcher la suppression du fichier lorsqu'il est ouvert par l'application / le processus en cours d'exécution. Un tel fichier ouvert empêche également la suppression de l'arborescence de dossiers entière dans le fichier ouvert.

  3. Fichiers / dossiers sur lesquels l'utilisateur actuel n'a pas les autorisations (NTFS) requises pour supprimer le fichier / dossier, ce qui empêche également la suppression de l'arborescence de dossiers dans ce fichier / dossier.

La première raison de ne pas supprimer un dossier est utilisée par cette ligne de commande pour supprimer tous les fichiers et sous-dossiers du dossier spécifié, mais pas le dossier lui-même. Le dossier devient temporairement le répertoire courant pour l'exécution du processus de commande, ce qui empêche la suppression du dossier lui-même. Bien sûr, cela entraîne la sortie d'un message d'erreur par la commande RD :

Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus.

Fichier est le mauvais terme ici car en réalité le dossier est utilisé par un autre processus, le processus de commande actuel qui a exécuté la commande RD . Eh bien, en réalité , un dossier est pour le système de fichiers , un fichier spécial avec l' attribut de fichier répertoire qui explique ce message d'erreur. Mais je ne veux pas aller trop loin dans la gestion du système de fichiers.

Ce message d'erreur, comme tous les autres messages d'erreur, qui peuvent survenir pour les trois raisons écrites ci-dessus, est supprimé en le redirigeant avec 2>nuldu handle STDERR vers le périphérique NUL .

La troisième commande, POPD , est exécutée indépendamment de la valeur de sortie de la commande RD .

POPD fait sortir le chemin du répertoire poussé par PUSHD de la pile et change le répertoire courant pour exécuter le processus de commande dans ce répertoire, c'est-à-dire restaure le répertoire courant initial. POPD supprime la lettre de lecteur temporaire créée par PUSHD dans le cas d'un chemin de dossier UNC.

Remarque: POPD peut échouer en silence pour restaurer le répertoire courant initial dans le cas où le répertoire courant initial était un sous-répertoire du répertoire à nettoyer qui n'existe plus. Dans ce cas particulier %PathToFolder%reste le répertoire courant. Il est donc conseillé d'exécuter la ligne de commande ci-dessus et non à partir d'un sous-répertoire de%PathToFolder% .

Un autre fait intéressant : j'ai essayé la ligne de commande en utilisant également un chemin UNC en partageant le répertoire local C:\Tempavec le nom de partage Tempet en utilisant le chemin UNC \\%COMPUTERNAME%\Temp\CleanTestaffecté à la variable d'environnement PathToFoldersous Windows 7. Si le répertoire en cours d'exécution de la ligne de commande est un sous-répertoire d'un local partagé le dossier auquel on accède en utilisant le chemin UNC, c'est-à-dire C:\Temp\CleanTest\Subfolder1, Subfolder1est supprimé par RD , et POPD suivant échoue silencieusement à C:\Temp\CleanTest\Subfolder1refaire le répertoire courant, ce qui Z:\CleanTestreste le répertoire courant pour le processus de commande en cours. Donc, dans ce cas très, très spécial, la lettre de lecteur temporaire reste jusqu'à ce que le répertoire actuel soit modifié, par exemple aveccd /D %SystemRoot% qui donne un répertoire local réellement existant. Malheureusement POPDne quitte pas avec une valeur supérieure à 0 s'il ne parvient pas à restaurer le répertoire courant initial, ce qui rend impossible la détection de cette condition d'erreur très spéciale en utilisant uniquement le code de sortie de POPD . Cependant, on peut supposer que personne ne rencontre jamais ce cas d'erreur très spécial car les chemins UNC ne sont généralement pas utilisés pour accéder aux fichiers et dossiers locaux.

Pour mieux comprendre les commandes utilisées, ouvrez une fenêtre d'invite de commandes, exécutez-y les commandes suivantes et lisez très attentivement l'aide affichée pour chaque commande.

  • pushd /?
  • popd /?
  • rd /?

Une seule ligne avec plusieurs commandes utilisant un fichier batch Windows explique les opérateurs &&et &utilisés ici.


Voyons maintenant la solution de fichiers batch en utilisant la commande DEL pour supprimer les fichiers dans %PathToFolder%et FOR et RD pour supprimer les sous-dossiers dans %PathToFolder%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

Le fichier de commandes vérifie d'abord que la variable d'environnement PathToFolderest vraiment définie avec un chemin de dossier sans guillemets doubles et sans barre oblique inversée à la fin. La barre oblique inverse à la fin ne serait pas un problème, mais les guillemets doubles dans un chemin de dossier pourraient être problématiques en raison de la valeur de PathToFolderest concaténée avec d'autres chaînes pendant l'exécution du fichier de commandes.

Les deux lignes sont importantes:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

La commande DEL est utilisée pour supprimer tous les fichiers du répertoire spécifié.

  • L'option /Aest nécessaire pour traiter vraiment tous les fichiers, y compris les fichiers avec l'attribut caché que DEL ignorerait sans utiliser l'option /A.
  • L'option /Fest nécessaire pour forcer la suppression des fichiers avec le jeu d'attributs en lecture seule.
  • L'option /Qest nécessaire pour exécuter une suppression discrète de plusieurs fichiers sans demander à l'utilisateur si plusieurs fichiers doivent vraiment être supprimés.
  • >nulest nécessaire pour rediriger la sortie des noms de fichiers écrits pour gérer STDOUT vers le périphérique NUL qui ne peut pas être supprimé car un fichier est actuellement ouvert ou l'utilisateur n'a pas l'autorisation de supprimer le fichier.
  • 2>nulest nécessaire pour rediriger la sortie du message d'erreur pour chaque fichier qui ne peut pas être supprimé de la poignée STDERR vers le périphérique NUL .

Les commandes FOR et RD sont utilisées pour supprimer tous les sous-répertoires du répertoire spécifié. Mais for /Dn'est pas utilisé car FOR ignore dans ce cas les sous-répertoires avec l'attribut caché défini. Pour cette raison, for /Fest utilisé pour exécuter la ligne de commande suivante dans un processus de commande distinct démarré en arrière-plan avec %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

Les sorties DIR au format nu en raison des /Bentrées de répertoire avec attribut D, c'est-à-dire les noms de tous les sous-répertoires dans le répertoire spécifié indépendamment des autres attributs comme l'attribut caché sans chemin. 2>nulest utilisé pour rediriger la sortie du message d'erreur par DIR sur aucun répertoire trouvé du handle STDERR vers le périphérique NUL .

L'opérateur de redirection >doit être échappé avec le caractère caret,, ^sur la ligne de commande FOR pour être interprété comme un caractère littéral lorsque l'interpréteur de commandes Windows traite cette ligne de commande avant d'exécuter la commande FOR qui exécute la dirligne de commande intégrée dans un processus de commande distinct démarré en arrière-plan.

FOR traite la sortie capturée écrite pour gérer STDOUT d'un processus de commande démarré qui sont les noms des sous-répertoires sans chemin et jamais entre guillemets.

FOR avec option /Fignore les lignes vides qui ne se produisent pas ici car DIR avec option /Bne produit pas de lignes vides.

FOR ignorerait également les lignes commençant par un point-virgule qui est le caractère de fin de ligne par défaut. Un nom de répertoire peut commencer par un point-virgule. Pour cette raison, eol=|est utilisé pour définir le caractère de barre verticale comme le caractère de fin de ligne qu'aucun répertoire ou fichier ne peut avoir dans son nom.

FOR diviserait la ligne en sous-chaînes en utilisant l'espace et la tabulation horizontale comme délimiteurs et affecterait uniquement la première chaîne délimitée par un espace / tabulation à la variable de boucle spécifiée I. Ce comportement de fractionnement n'est pas souhaité ici car un nom de répertoire peut contenir un ou plusieurs espaces. Par conséquent, delims=est utilisé pour définir une liste vide de délimiteurs pour désactiver le comportement de fractionnement de ligne et être affecté à la variable de boucle I, toujours le nom complet du répertoire.

La commande FOR exécute la commande RD pour chaque nom de répertoire sans chemin d'accès. C'est la raison pour laquelle sur la ligne de commande RD , le chemin d'accès au dossier doit être spécifié à nouveau, ce qui est concaténé avec le nom du sous-dossier.

Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez une fenêtre d'invite de commandes, exécutez-y les commandes suivantes et lisez très attentivement toutes les pages d'aide affichées pour chaque commande.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?
Mofi
la source
5

Utilisez le Bloc-notes pour créer un document texte et copiez / collez ceci:

rmdir /s/q "%temp%"
mkdir "%temp%"

Sélectionnez Enregistrer sous et nom de fichier:

delete_temp.bat

Enregistrer en tant que type: tous les fichiers et cliquez sur le Save bouton.

Il fonctionne sur tout type de compte (administrateur ou utilisateur standard). Lancez-le!

J'utilise une variable temporaire dans cet exemple, mais vous pouvez en utiliser n'importe quelle autre! PS: pour Windows OS uniquement!

Filip Gjorgjevikj
la source
une solution assez simple et propre
Carlos Liu
4

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. Il faut donc deux commandes:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Maxim Suslov
la source
Oui c'est correct. Doit être en deux étapes. Cela mérite plus de votes positifs, car cela explique pourquoi, par rapport à une réponse plus votée ci-dessus.
WesternGun
La ligne de commande DEL manque l'option /Ade supprimer également les fichiers avec le jeu d'attributs masqués et l'option /Fde supprimer également les fichiers avec le jeu d'attributs en lecture seule et les guillemets doubles autour du dernier argument. Ce del /A /F /Q "PATH_TO_FOLDER\*"serait mieux. Et la ligne de commande FOR doit être modifiée en for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"car FOR ignore les répertoires avec un ensemble d'attributs masqués. DIR avec options /AD /Baffiche tous les répertoires PATH_TO_FOLDERavec uniquement leurs noms.
Mofi
En quoi est-ce différent de (certaines) des réponses précédentes?
Peter Mortensen
4

Vous pouvez le faire en utilisant la commande suivante pour supprimer tout le contenu et le dossier parent lui-même:

RMDIR [/S] [/Q] [drive:]path            
Ripon Al Wasim
la source
En quoi est-ce différent des deux réponses précédentes?
Peter Mortensen
Est-ce que cette réponse répond à l'exigence "il pourrait y avoir une erreur comme" ce fichier / dossier est déjà en cours d'utilisation "... lorsque cela se produit, il devrait simplement continuer et ignorer ce fichier / dossier." ?
Peter Mortensen
1

J'ai essayé plusieurs de ces approches, mais aucune n'a fonctionné correctement.

J'ai trouvé cette approche en deux étapes sur la ligne de commande Windows du site :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Cela a fonctionné exactement comme j'avais besoin et comme spécifié par l'OP.

Paul Haan
la source
Les deux lignes de commande peuvent être combinées en une seule ligne de commande: l' option forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file" DEL/A est ajoutée pour supprimer également les fichiers avec un attribut masqué, sinon DEL afficherait un message d'erreur introuvable pour chaque fichier masqué dans %pathtofolder%. L' option DEL/F est ajoutée pour supprimer également les fichiers dont l'attribut en lecture seule est défini %pathtofolder%, sinon DEL afficherait un message d'erreur d'accès refusé.
Mofi
Cette solution est la plus lente de toutes les solutions incomplètes publiées ici en raison du démarrage d'une cmd.exeinstance pour chaque fichier et chaque répertoire dans %pathtofolder%. L'avantage est que FORFILES n'ignore pas les répertoires dont l'attribut masqué est défini comme FOR .
Mofi
Re "Cela a fonctionné exactement comme j'avais besoin et comme spécifié par l'OP." : Avez-vous testé l'exigence "il pourrait y avoir une erreur comme" ce fichier / dossier est déjà utilisé "... lorsque cela se produit, il devrait simplement continuer et ignorer ce fichier / dossier." ?
Peter Mortensen
0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q
Robie
la source
La 2e ligne supprimera les fichiers de chaque fichier de tous les dossiers du répertoire temporaire de Windows et la 3e ligne nettoie les répertoires, y compris son contenu.
Robie
La ligne de commande FOR doit être modifiée en for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"car FOR ignore les répertoires avec un ensemble d'attributs masqués. DIR avec options /AD /Baffiche tous les répertoires %TEMP%avec uniquement leurs noms.
Mofi
Documentation pour DEL . Je pense que vous êtes sur la bonne voie avec / F: "Ignorer le paramètre en lecture seule et supprimer quand même (FORCE)"
Peter Mortensen
-10

Utilisation:

del %pathtofolder%\*.*   /s /f  /q

Cela supprime tous les fichiers et sous-dossiers %pathtofolder%, y compris les fichiers en lecture seule, et ne demande pas de confirmation.

Alon
la source
9
Pour moi, cela laisse des sous-dossiers vides dans% pathtofolder%.
DH
35
Il ne supprime PAS les sous-dossiers dans% pathtofolder%. Tellement mauvais que je n'ai pas la réputation de voter contre cette fausse réponse
Vitalii Korsakov
1
Comme l'a souligné Vitalii Korsakov, cela supprime tous les fichiers et fichiers des sous-répertoires, mais laisse les sous-répertoires en place que l'OP a également demandé comment supprimer.
Fuzz Evans
6
Bien que cette commande laisse des dossiers vides, elle est beaucoup plus proche de ce qui a été demandé que de la réponse acceptée. Bien sûr, cela dépend des circonstances. Dans mon cas, je préfère avoir des dossiers vides, plutôt que des fichiers laissés dans le répertoire racine.
MarcusUA
mais comment nous pouvons supprimer les dossiers et sous-dossiers qui étaient ouverts dans le partage réseau lorsqu'une autre machine cliente ouvre le lecteur de partage ayant un accès en écriture à ce dossier. La commande psfile et net files fermera la session de fichier mais à nouveau après quelques secondes, elle créera automatiquement une autre session pour cet utilisateur sur le serveur ...
user1954762