82 votes

Qu'est-il arrivé à deltree, et quel est son remplaçant ?

Dans les versions antérieures de MS-DOS - j'ai envie de dire la version 7, mais je peux me tromper - il y avait une fonction deltree qui supprime récursivement tous les sous-répertoires et fichiers d'un chemin donné.

deltree n'existe plus, mais del ne semble pas avoir hérité de la capacité à supprimer un arbre. del /s supprime les fichiers, mais pas les dossiers.

Comment supprimer facilement (c'est-à-dire en une seule commande) un arbre à partir d'un fichier batch ?

3 votes

Deltree a été introduit dans la version 5.0 (je me souviens encore de la joie de pouvoir l'utiliser) - Je me sens vieux.

92voto

Synetech Points 4095

Comme d'autres l'ont mentionné, le rd La commande a le /s pour supprimer récursivement les sous-répertoires. Vous pouvez le combiner avec l'option /q pour supprimer de force un sous-répertoire (et son contenu) sans demander l'autorisation de le faire.

rd /s /q c:\foobar

Ce que tout le monde oublie, c'est que rd es no un remplacement exact de deltree comme en apparence ( presque ) chaque page renvoyée par Google pour windows deltree voudrait vous faire croire. Le site deltree La commande a fonctionné pour les deux répertoires et les fichiers ce qui en fait une commande de suppression unique, pratique et polyvalente. C'est-à-dire que les deux cas suivants sont valides :

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

Cependant rd (sans surprise) ne fonctionne que pour les répertoires . Ainsi, 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

En outre, le del ne fonctionne que pour les fichiers, pas pour les répertoires, donc seule la seconde commande est valide alors que la première donne une erreur :

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

Il n'y a pas de moyen intégré pour supprimer des fichiers et des répertoires comme cela pourrait être fait avec deltree . Utilisation de rd y del individuellement est, au mieux, peu pratique car il faut distinguer si un objet du système de fichiers (nom de fichier/dossier) est un fichier ou un répertoire, ce qui n'est pas toujours possible ou pratique.

Vous pouvez copier le deltree à partir d'un système d'exploitation antérieur, mais elle ne fonctionnera que sur les versions 32 bits de Windows puisqu'il s'agit d'une commande DOS 16 bits (même dans Windows 9x).

Une autre option consiste à créer un fichier batch qui appelle à la fois del y 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

Cela appelle à la fois rd y del en passant dans les arguments et en redirigeant la sortie à nul pour éviter l'erreur que l'un d'eux émettra invariablement.

Vous voudrez probablement personnaliser le comportement afin de prendre en compte ou de simplifier les paramètres ou d'autoriser les messages d'erreur, mais même ainsi, ce n'est pas idéal et ce n'est pas un remplacement direct de l'option deltree .

Une autre solution consiste à se procurer un outil tiers, mais en trouver un est un véritable exercice d'élaboration de requêtes de recherche.

2 votes

@TobyAllen, "rm" ? Voulez-vous dire rd ? Si c'est le cas, vous devez relire le texte d'aide ; il est indiqué que Supprime tous les répertoires et fichiers dans le répertoire spécifié en plus du répertoire lui-même. Utilisé pour supprimer une arborescence de répertoires. Comme je l'ai dit, il ne supprime pas les fichiers. Si vous l'utilisez comme ça : rd /s foobar.txt il vous demandera si vous en êtes sûr, et si vous dites oui (ou utilisez la touche /q ), alors il donne l'erreur The directory name is invalid.

0 votes

Vous pouvez en fait supprimer tout ce qui se trouve sous un répertoire (y compris ses sous-répertoires) avec RMDIR /S Il est donc faux de dire qu'il n'existe aucun moyen de supprimer à la fois des fichiers et des dossiers d'un seul coup.

0 votes

@vapcguy, rd /s s'applique uniquement à la mais pas les fichiers qu'il contient . Pour supprimer les fichiers qui s'y trouvent, vous devez utiliser la méthode suivante rd sur le répertoire lui-même. Par exemple, vous ne pouvez pas dire rd c:\target\foobar.txt vous devez utiliser rd /s c:\target mais vous ne voulez peut-être pas supprimer le répertoire lui-même, seulement son contenu. deltree pourrait le faire, mais rd /s ne peut pas, rd /s supprime également le répertoire lui-même.

43voto

Jeremiah Points 2738

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

Supprimer tous les sous-répertoires avec /S

Utilisez-le discrètement avec le /Q

Exemple :

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

Documentation :

3 votes

"RMDIR /S /Q .\" efface effectivement le répertoire courant et tout ce qu'il contient. Oui, il se plaint de ne pas pouvoir supprimer le répertoire courant, ce qui peut être utile. Assurez-vous simplement que vous êtes dans le bon répertoire lorsque vous l'exécutez ! :)

6voto

Jon Skeet Points 692016
rmdir /s /q directory

4voto

Ferruccio Points 51508
$ help rd
Removes (deletes) a directory.

RMDIR \[/S\] \[/Q\] \[drive:\]path
RD \[/S\] \[/Q\] \[drive:\]path

    /S      Removes all directories and files in the specified directory
            in addition to the directory itself.  Used to remove a directory
            tree.

    /Q      Quiet mode, do not ask if ok to remove a directory tree with /S

2voto

Sohail xIN3N Points 421

En fait, 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. Il s'agit d'une commande interne, c'est pourquoi vous ne trouverez pas de RD.exe et de RMDIR.exe.

En tapant ce "RD / ?" dans cmd sans double qoutes vous obtiendrez exactement ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X