web-dev-qa-db-fra.com

Qu'est-il arrivé à deltree, et quel est son remplacement?

Dans les versions antérieures de MS-DOS - je voulais dire la version 7, mais je pouvais me tromper - il y avait une commande deltree, qui supprimait de manière récursive tous les sous-répertoires et fichiers d'un chemin donné. 

deltree n'existe plus, mais del n'a pas semblé hériter de la possibilité de supprimer un arbre. del /s supprime les fichiers, mais pas les dossiers.

Comment vous permettre facilement (c'est-à-dire, en une seule commande) de supprimer une arborescence d'un fichier de commandes?

69
David Koelle

Comme d'autres l'ont mentionné, la commande rd a le commutateur /s pour supprimer de manière récursive les sous-répertoires. Vous pouvez le combiner avec le commutateur /q pour supprimer de force un sous-répertoire (et son contenu) sans le demander

rd /s /q c:\foobar

Ce qui manque à tout le monde, c’est que rd est pas un remplaçant exact de deltree, ce qui est apparemment ( presque ) chaque page renvoyée par Google pour windows deltree voudrait vous faire croire. La commande deltree a fonctionné à la fois pour les répertoires et les fichiers, ce qui en fait une seule commande de suppression pratique et polyvalente. Ce sont les deux des éléments suivants sont valides:

deltree /y c:\foobar
deltree /y c:\baz.txt

Cependant rd (sans surprise) ne fonctionne que pour les répertoires. En tant que tel, seule la première de ces commandes est valide, tandis que la seconde donne une erreur et laisse le fichier non supprimé:

rd /s /q c:\foobar
rd /s /q c:\baz.txt

De plus, la commande del ne fonctionne que pour les fichiers, pas pour les répertoires. Ainsi, seule la deuxième commande est valide, tandis que la première génère une erreur:

del /f /q c:\foobar
del /f /q c:\baz.txt

Il n’existe pas de méthode intégrée pour supprimer des fichiers et des répertoires comme cela pourrait être fait avec deltree. Utiliser rd et del individuellement est au mieux gênant, car il est nécessaire de distinguer si un objet de système de fichiers (nom de fichier/nom de dossier) est un fichier ou un répertoire qui n'est pas toujours possible ou pratique.

Vous pouvez copier la commande deltree à partir d’un système d’exploitation précédent. Toutefois, cela ne fonctionnera que sur les versions 32 bits de Windows car il s’agit d’une commande DOS 16 bits (même sous Windows 9x).

Une autre option consiste à créer un fichier de commandes qui appelle à la fois del et rd; quelque chose comme ça:

::deltree.bat

@echo off
rd  %* 2> nul
del %* 2> nul

Vous l'appelleriez ainsi:

deltree.bat /s /q /f c:\foobar
deltree.bat /s /q /f c:\baz.txt

Ceci appelle à la fois rd et del, en transmettant les arguments et en redirigeant la sortie vers nul afin d'éviter l'erreur que l'un d'eux émettra invariablement.

Vous voudrez probablement personnaliser le comportement afin d'adapter ou de simplifier les paramètres ou d'autoriser les messages d'erreur, mais même dans ce cas, ce n'est pas idéal et ne remplace pas directement deltree.

Une alternative consiste à obtenir un outil tiers, bien que le trouver soit un véritable exercice de création de requêtes de recherche.

79
Synetech

Il a été remplacé par les commandes: RMDIR ou RD

Supprimer tous les sous-répertoires avec/S

Utilisez-le tranquillement avec le/Q

Exemple:

RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete

Documentation: 

41
Jeremiah

Nostalgique, j'ai écrit mon propre Deltree.exe. Il fonctionne avec les répertoires et les fichiers, et utilise SHFileOperation () pour la vitesse.

https://github.com/ai7/toolbox/tree/master/deltree

deltree v1.01 [Mar 27 2015, 16:31:02] (gcc 4.9.1)

Usage: deltree [options] <path> ...

Options:
  -y    yes, suppresses prompting for confirmation
  -s    silent, do not display any progress dialog
  -n    do nothing, simulate the operation
  -f    force, no prompting/silent (for rm compatibility)
  -r    ignored (for rm compatibility)

Delete directories and all the subdirectories and files in it.

Il faut des caractères génériques et vous pouvez l’utiliser comme unix rm:

deltree -rf *
6
raychi
rmdir /s /q directory
5
Jon Skeet

De nos jours, vous pouvez utiliser Powershell pour effectuer la même tâche:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
4
Rosberg Linhares
$ help rd 
 Supprime (supprime) un répertoire .

 RMDIR [/ S] [/ Q] [lecteur:] chemin 
 RD [/ S] [/ Q] [lecteur:] chemin 

/S Supprime tous les répertoires et fichiers du répertoire spécifié 
 en plus du répertoire lui-même. Utilisé pour supprimer un répertoire 
 arbre.

/Q Mode silencieux, ne demandez pas si ok pour supprimer une arborescence de répertoires avec /S
4
Ferruccio

En réalité, les commandes RMDIR et RD du système d'exploitation Windows moderne fusionnent les commandes RD et Deltree de Win 98 en une seule commande. C'est une commande interne, c'est pourquoi vous ne trouverez aucun RD.exe ni RMDIR.exe.

En tapant ce "RD /?" en cmd sans doubles routes, vous obtiendrez exactement ce que vous voulez.

2
Sohail xIN3N

Utilisez ceci:

cd (your directory here)
del *.* /f /s /q
0
Theprogrammer7018

supprimer un répertoire et tout son contenu de manière récursive

rd /s MY_DOOMED_DIR
0
Gregg