172 votes

Supprimer des fichiers ou des dossiers de manière récursive sur Windows CMD

Comment supprimer des fichiers ou des dossiers de manière récursive sous Windows à partir de la ligne de commande ?

J'ai trouvé cette solution où le chemin que nous conduisons sur la ligne de commande et exécuter cette commande.

J'ai donné un exemple avec un dossier d'extension de fichier .svn :

for /r %R in (.svn) do if exist %R (rd /s /q "%R")

2voto

Mofi Points 2690

Le processeur de commande Windows cmd.exe possède deux commandes internes pour la suppression des fichiers et des dossiers :

  1. La commande DEL est pour le suppression de fichiers avec une sortie d'aide à l'exécution dans une fenêtre d'invite de commande Windows soit help del o del /? .
  2. La commande RMDIR ou avec un nom plus court RD est pour déménagement de répertoires avec une sortie d'aide à l'exécution dans une fenêtre d'invite de commande Windows soit help rmdir o rmdir /? o help rd o rd /? .

Suppression de tous les fichiers *.svn dans une arborescence de dossiers entière

Il est possible d'utiliser dans une fenêtre d'invite de commande ou dans un fichier batch de Windows la commande suivante pour supprimer vraiment tout fichiers dont le nom de fichier 8.3, long ou court, est reconnu par le motif joker *.svn dans le répertoire %USERPROFILE%\Projects ou l'un de ses sous-répertoires :

del /A /F /Q /S "%USERPROFILE%\Projects\*.svn" >nul 2>&1

L'utilisation de l'option /A pour correspondre à tous les fichiers indépendamment des attributs du fichier remplace le défaut implicite /A-H pour ignorer les fichiers cachés. Ainsi, même les fichiers avec l'attribut caché sont supprimés par cette commande en raison de l'utilisation de l'option /A . Fichiers correspondant à un motif joker *.svn avec l'attribut "hidden" sont ignorés si l'on n'utilise pas l'option /A .

L'option /F force la suppression des fichiers dont l'extension est .svn qui ont l'attribut "lecture seule" défini. Le message d'erreur suivant s'affiche Access is denied. si un *.svn a l'attribut lecture seule et l'option /F n'est pas utilisé lors de l'exécution de la commande DEL .

Le choix du silence /Q empêche l'invite de confirmation de l'utilisateur Are you sure (Y/N)? .

L'option /S entraîne une recherche non seulement dans le répertoire spécifié, mais aussi dans tous ses sous-répertoires, y compris ceux dont l'attribut caché a été défini, même si l'on n'utilise pas l'option /A pour les fichiers dont le nom long ou court 8.3 correspond à un motif joker *.svn .

Les deux redirections >nul y 2>&1 a pour résultat de rediriger la sortie de la liste des fichiers supprimés vers le gestionnaire STDOUT (sortie standard) et les messages d'erreur envoyés à la poignée STDERR (erreur standard) au dispositif NUL pour supprimer chaque sortie.

On a également supprimé les liens durs et les liens symboliques correspondant au motif de caractères génériques. *.svn sur l'utilisation de cette commande, mais pas les fichiers liés sur un nom de fichier ne se terminant pas par .svn ou être dans une autre arborescence de répertoires.

Fichiers correspondant au motif joker *.svn actuellement ouvert par un processus (programme/application) avec l'utilisation de permissions d'accès partagé pour refuser à tous les autres processus de supprimer le fichier tant que les fichiers ouverts par ce processus ne sont pas supprimés par cette commande. Les autorisations du système de fichiers peuvent également faire en sorte que les fichiers ne soient pas supprimés par cette commande.

Suppression de tous les dossiers *.svn dans une arborescence de dossiers entière

On peut utiliser, dans une fenêtre d'invite de commande de Windows, la commande suivante pour supprimer réellement tous les éléments suivants dossiers correspondance en long ou en court 8.3 nom de dossier le motif joker *.svn dans le répertoire %USERPROFILE%\Projects et tous ses sous-répertoires :

for /F "delims=" %I in ('dir "%USERPROFILE%\Projects\*.svn" /AD /B /S 2^>nul') do @rd /Q /S "%I" 2>nul

La même ligne de commande pour une utilisation dans un fichier batch contenant @echo off en haut est :

for /F "delims=" %%I in ('dir "%USERPROFILE%\Projects\*.svn" /AD /B /S 2^>nul') do rd /Q /S "%%I" 2>nul

Il est exécuté sur plus cmd.exe en arrière-plan avec option /c et la ligne de commande spécifiée entre ' comme arguments supplémentaires pour exécuter en arrière-plan la commande interne du processeur de commandes Windows DIR pour chercher

  • dans le répertoire spécifié %USERPROFILE%\Projects
  • et dans tous ses sous- sous dans l'option /S
  • pour seulement les répertoires à cause de l'utilisation de l'option /AD qui comprend également les jonctions et les liens symboliques de répertoire
  • correspondant au motif joker *.svn .

Les entrées du système de fichiers (= noms de répertoires) correspondant à ces critères sont éditées au format nu en raison de l'option /B avec le chemin complet à cause de l'option /S pour gérer STDOUT du processus de commande en arrière-plan sans entourer " même sur un nom de répertoire complet contenant un espace ou un de ces caractères &()[]{}^=;!'+,`~ . Le message d'erreur émis par DIR qui ne trouve aucun nom correspondant à ces critères est redirigé vers le dispositif NUL pour le supprimer.

L'opérateur de redirection > doit être échappé avec un caractère d'arrêt ^ en POUR à interpréter comme un caractère littéral lorsque le processeur de commandes Windows analyse cette ligne de commande avant d'exécuter la commande. POUR qui exécute le programme embarqué dir dans un processus de commande distinct lancé en arrière-plan.

La liste de sortie des noms de répertoires avec leurs chemins complets à gérer STDOUT est capturée par cmd.exe le traitement du fichier de lot et traité par POUR après avoir commencé cmd.exe s'est fermée.

El POUR /F option delims= définit une liste vide de délimiteurs de chaîne, ce qui a pour conséquence que chaque nom de répertoire entier est affecté complètement l'un après l'autre à la variable de boucle spécifiée I .

La commande RD est exécuté pour supprimer tranquillement à cause de l'option /Q le répertoire avec tous les fichiers et tous les sous-répertoires à cause de l'option /S .

Il est également possible de supprimer les jonctions (liens souples) et les liens de répertoire symboliques correspondant au motif de caractères génériques. *.svn en utilisant cette commande, mais pas les répertoires liés en ayant un nom de répertoire ne se terminant pas par .svn ou être dans une autre arborescence de répertoires.

Un répertoire correspondant au motif joker *.svn dans lequel un fichier est actuellement ouvert par un processus (programme/application) avec l'utilisation de permissions d'accès partagé pour refuser à tous les autres processus de supprimer le fichier tant qu'il est ouvert par ce processus n'est pas supprimé par cette commande et bien sûr aussi aucun répertoire au-dessus du répertoire contenant le fichier qui ne peut être supprimé pour le moment. Les permissions du système de fichiers peuvent également faire en sorte que les répertoires ne soient pas supprimés par cette commande. Windows empêche également par défaut la suppression d'un répertoire qui est le répertoire de travail actuel d'un processus en cours.

Autres informations utiles concernant la suppression des fichiers et des dossiers

Le chemin du répertoire %USERPROFILE%\Projects\ peut être supprimé complètement ou remplacé par .\ dans les commandes ci-dessus pour supprimer les fichiers et dossiers correspondant au motif joker *.svn dans le répertoire actuel du processus du processeur de commandes Windows qui exécute les commandes.

Le chemin du répertoire %USERPROFILE%\Projects\ peut être remplacé par %~dp0 pour supprimer les fichiers et dossiers correspondant au modèle de caractères génériques *.svn dans le répertoire du fichier batch sur l'utilisation des lignes de commande ci-dessus dans un fichier batch indépendamment du répertoire qui est le répertoire courant lors de l'exécution du fichier batch.

Le chemin du répertoire %USERPROFILE%\Projects\ peut également être remplacé par un chemin relatif. Veuillez lire la documentation de Microsoft sur Nommer les fichiers, les chemins et les espaces de noms pour plus de détails sur les chemins relatifs.

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

  • del /?
  • dir /?
  • for /?
  • rd /?

Exécuter mklink /? pour obtenir de l'aide sur la façon de créer des liens de fichiers et de répertoires, très bien expliqué par MKLink .

Voir aussi :

0voto

alexsupra Points 21
dir /b %temp% >temp.list
for /f "delims=" %%a in (temp.list) do call rundll32.exe advpack.dll,DelNodeRunDLL32 "%temp%\%%a"

0voto

KalimR Points 93

Cela a marché pour moi

del /s /q "nom_du_dossier"

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