Question

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 +

Était-ce utile?

La solution

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 associé à del , effacer , rd , ri , rm et rmdir ) et prend un argument -Recurse qui peut être raccourci en -r

rd -r "path"

Autres conseils

admin:

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

Fonctionne pour tout ce qui inclut les fichiers système

EDIT: J'ai en fait trouvé le meilleur moyen de résoudre également le problème du chemin d'accès aux fichiers trop long:

mkdir \empty
robocopy /mir \empty folder

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 une arborescence de répertoires.

  • / Q Mode silencieux, ne demandez pas si vous pouvez supprimer une arborescence de répertoires avec / S

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

Accédez au 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: Lance rmdir en mode silencieux. Supprime les répertoires sans confirmation.

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

Pour supprimer un répertoire (qu'il existe ou non), utilisez les éléments suivants:

if exist myfolder ( rmdir /s/q myfolder )

rmdir / S / Q% DIRNAME%

rmdir / s dirname

Essayez cette commande:

del /s foldername

Premièrement, examinons ce que rm -rf fait:

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 existe trois scénarios dans lesquels rm -rf est couramment utilisé, car il est attendu qu'il renvoie 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 la totalité des autorisations, mais personne n'utilise les autorisations ou ne tente de se refuser l'accès en écriture à des éléments de Windows (de toute façon) (cela est censé être une blague & # 8230;).

Tout d'abord, définissez ERRORLEVEL sur 0 , puis supprimez le chemin uniquement s'il existe, à l'aide de commandes différentes selon qu’il s’agisse ou non d’un répertoire. IF EXIST ne définit pas ERRORLEVEL sur 0 si le chemin n'existe pas, il est donc nécessaire de définir ERRORLEVEL en premier pour pouvoir détecter correctement le succès de l'opération. une manière qui imite l’utilisation normale de rm -rf . La protection du RD avec IF EXIST est nécessaire car RD , contrairement à rm -f , générera une erreur si le La cible n'existe pas.

L'extrait de script suivant suppose que DELPATH est pré-coté. (Ceci est sans danger lorsque 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 voir ce qui se passe pour vous-même). Une fois que l'extrait est terminé, vous pouvez rechercher une erreur 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 fait est que tout est plus simple lorsque l'environnement est simplement conforme à POSIX. Ou si vous installez un MSYS minimal et ne l'utilisez que.

Vous pouvez installer GnuWin32 et utiliser les commandes * nix de manière native sur Windows. Je l’installe avant d’installer quoi que ce soit d’autre sur une copie fraîche de Windows à la menthe. :)

Voici ce que vous devez faire ...

Créez un fichier de commandes avec la ligne suivante

RMDIR / S% 1

Enregistrez votre fichier de commandes sous Remove.bat et placez-le 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! Maintenant, vous pouvez cliquer avec le bouton droit sur n’importe quel répertoire et utiliser la fonction RMDIR

Utilisation de Powershell 5.1

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

Remplacez les journaux par le nom du répertoire à supprimer.

get-childitem recherche le répertoire enfants portant le nom de manière récursive dans le chemin actuel (.).

remove-item supprime le résultat.

La réponse acceptée est excellente, mais en supposant que Node soit installé sur votre ordinateur, vous pouvez le faire beaucoup plus précisément avec la bibliothèque de nœuds "rimraf", ce qui permet de placer des motifs globalement. Si vous en utilisez beaucoup (je le fais), installez-le simplement.

yarn global add rimraf

alors, par exemple, un motif que j'utilise constamment:

rimraf .\**\node_modules

ou pour un one-liner qui vous permet d'esquiver l'installation globale, mais qui prend un peu plus de temps pour le téléchargement dynamique du package:

npx rimraf .\**\node_modules

voici ce qui a fonctionné pour moi:

Essayez simplement de réduire la longueur du chemin. i.e :: Renommez tous les dossiers qui mènent à un tel fichier en noms les plus petits possibles. Dites les noms d'une lettre. Renommez vers le haut dans la hiérarchie des dossiers. De cette façon, vous réduisez efficacement la longueur du chemin. Enfin, essayez de supprimer le fichier immédiatement.

via Powershell

 Remove-Item -Recurse -Force "TestDirectory"

via une invite de commande

https://stackoverflow.com/a/35731786/439130

UTILISEZ À VOS PROPRES RISQUES. INFORMATIONS FOURNIES "EN L'ÉTAT". NON TESTÉ DE MANIÈRE ULTÉRIEURE.

Cliquez avec le bouton droit sur l’icône Windows (généralement en bas à gauche) > cliquez sur " Windows PowerShell (Admin) " > utilisez cette commande (avec le soin voulu, vous pouvez facilement supprimer tous vos fichiers si vous ne faites pas attention):

rd -r -include *.* -force somedir

somedir est le répertoire non vide à supprimer.

Notez qu'avec les disques externes connectés, ou les disques avec des problèmes, Windows se comporte parfois de façon étrange - cela ne provoque pas d'erreur lors de la suppression (ou de toute tentative de copie), mais le répertoire n'est pas supprimé (ou copié) comme indiqué. (J'ai constaté que, dans ce cas, du moins pour moi, la commande donnée par @n_y dans sa réponse produirait des erreurs telles que "get-childitem: le fichier ou le répertoire est corrompu et illisible.", Dans PowerShell.)

Il existe également deltree si vous utilisez une version antérieure de Windows.

J'aime beaucoup ce site pour trouver des commandes: SS64: Suppression - Suppression de fichiers

del / s / q repertoireetedeleted

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top