"rm -rf" équivalent pour Windows?

J'ai besoin d'un moyen de supprimer récursivement un dossier et ses enfants.

Existe-t-il un outil prédéfini pour cela, ou dois-je en écrire un?

DEL /S ne supprime pas les répertoires.

DELTREE a été supprimé de Windows 2000 +

339
demandé sur TylerH 2008-09-19 03:08:29

18 réponses

RMDIR ou RD si vous utilisez l'invite de commande classique (cmd.exe):

rd /s /q "path"

Si vous utilisez PowerShell, vous pouvez utiliser Remove-Item (qui est Alias pour del, erase, rd, ri, rm et rmdir) et prend un argument -Recurse qui peut être court-circuité à -r

rd -r "path"
482
répondu Duncan Smart 2017-07-05 10:56:07

Admin:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Fonctionne pour tout, y compris les fichiers sys

EDIT: j'ai en fait trouvé le meilleur moyen qui résout également le problème trop long du chemin du fichier:

mkdir \empty
robocopy /mir \empty folder
114
répondu wbkang 2014-01-02 03:41:30

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

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

  • /S Supprime tous les fichiers et répertoires dans le répertoire spécifié en plus du répertoire lui-même. Utilisé pour supprimer une arborescence de répertoires.

  • /Q le mode Silencieux, ne demandez pas si ok pour supprimer une arborescence avec /S

82
répondu Jim McKeeth 2017-10-18 21:21:25

Vous pouvez installer cygwin, qui a rm ainsi que ls etc.

15
répondu user17481 2008-09-18 23:14:45

Allez dans le chemin et déclenchez cette commande.

rd /s /q "FOLDER_NAME"

/ S: supprime le répertoire spécifié et tous les sous-répertoires, y compris les fichiers. Utilisez /s pour supprimer un arbre.

/ q: exécute rmdir en mode silencieux. Supprime les répertoires sans confirmation.

/? : Affiche l'aide à l'invite de commande.

13
répondu Sireesh Yarlagadda 2016-03-01 19:32:12

rmdir /S /Q %DIRNAME%

5
répondu Branan 2008-09-18 23:12:44

Pour supprimer un répertoire (qu'il existe ou non), utilisez ce qui suit:

if exist myfolder ( rmdir /s/q myfolder )
5
répondu Clay 2016-06-01 19:59:06

Essayez cette commande:

del /s foldername
3
répondu Jeremy Ruten 2008-09-18 23:11:01

Rmdir / s dirname

2
répondu Brian Mitchell 2008-09-18 23:10:48

Vous pouvez installer GnuWin32 et utiliser les commandes *nix en mode natif sous windows. Je l'installe avant d'installer quoi que ce soit d'autre sur une nouvelle copie mentholée de windows. :)

2
répondu epochwolf 2008-09-19 00:03:57

Voici ce que vous devez faire...

Créez un fichier batch avec la ligne suivante

RMDIR /S %1

Enregistrez votre fichier de commandes que Remove.bat et le mettre dans C:\windows

Créez la clé de Registre suivante

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Lancez regedit et mettez à jour la valeur par défaut HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default avec la valeur suivante

"c:\windows\REMOVE.bat" "%1"

C'est tout! Vous pouvez maintenant cliquer avec le bouton droit sur n'importe quel répertoire et utiliser la fonction RMDIR

2
répondu Louis 2012-09-22 08:10:38

Tout d'abord, passons en revue ce que fait rm -rf:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

Il y a trois scénarios où rm -rf est couramment utilisé où il est prévu de retourner 0:

  1. le chemin spécifié n'existe pas.
  2. le chemin spécifié existe et est un répertoire.
  3. le chemin spécifié existe et est un fichier.

Je vais ignorer toute la chose des autorisations, mais personne n'utilise les autorisations ou essaie de se refuser l'accès en écriture sur les choses dans Windows de toute façon (OK, c'est censé être une blague...).

Tout d'abord définissez ERRORLEVEL sur 0, puis supprimez le chemin uniquement s'il existe, en utilisant différentes commandes selon qu'il s'agit ou non d'un répertoire. {[6] } ne définit pas ERRORLEVEL à 0 si le chemin n'existe pas, donc définir ERRORLEVEL à 0 en premier est nécessaire pour détecter correctement le succès d'une manière qui imite l'utilisation normale de rm -rf. Garder le RD avec IF EXIST est nécessaire car RD, contrairement à rm -f, lancera une erreur si la cible ne le fait pas exister.

L'extrait de script suivant suppose que DELPATH est préquoté. (C'est sûr, quand vous faites quelque chose comme SET DELPATH=%1. Essayez de mettre ECHO %1 dans un .cmd et de lui passer un argument avec des espaces et voyez ce qui se passe pour vous-même). Une fois l'extrait terminé, vous pouvez vérifier l'échec avec IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

Le Point est que tout est plus simple lorsque l'environnement est juste conforme à POSIX. Ou si vous installez un MSYS minimal et utilisez-le simplement.

2
répondu binki 2017-03-20 10:18:27

Voici ce qui a fonctionné pour moi:

Essayez simplement de diminuer la longueur du chemin. c'est-à-dire :: renommez tous les dossiers qui mènent à un tel fichier en plus petits noms possibles. Dites un nom de lettre. Continuez à renommer vers le haut dans la hiérarchie des dossiers. Par ce u réduire efficacement la longueur du chemin. Maintenant, essayez enfin de supprimer le fichier tout de suite.

0
répondu Gaurav Deochakke 2015-03-25 13:01:10

Cela supprimera "mon dossier" et son contenu sans invite:

rd /s /q "C:\Users\jerry.g\AppData\Roaming\my folder"
0
répondu JerryGoyal 2018-07-04 07:12:23

Utiliser Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Remplacez logs par le nom de répertoire que vous souhaitez supprimer.

Get-childitem recherche le répertoire children avec le nom récursivement à partir du chemin actuel (.).

Remove-item supprime le résultat.

0
répondu n_y 2018-09-03 06:57:45

Il y a aussi deltree si vous êtes sur une ancienne version de windows.

J'aime vraiment ce site pour trouver des commandes: SS64: Del-supprimer les fichiers

-1
répondu Jason Wadsworth 2008-09-18 23:14:50

Del / s / q directorytobedeleted

-2
répondu joe 2015-12-30 10:58:13
-3
répondu wnoise 2008-09-18 23:09:50