Del / s (a) ne fonctionne-t-il pas du tout (il n'est disponible que dans certaines versions) ou (b) quitte-t-il le répertoire de niveau supérieur mais supprime-t-il tout ce qu'il contient ou (c) laisse-t-il tous les répertoires tout en supprimant tous les fichiers?
wnoise
@Aaron, réponse c, vous devez utiliser rmdir / s pour supprimer les répertoires et les fichiers.
Wedge
31
N'est-ce pas vraiment format c:alors l'installation de Linux? Je plaisante bien sûr.
Basile Starynkevitch
Réponses:
694
RMDIR ou RD si vous utilisez l'invite de commande classique (cmd.exe):
rd /s /q "path"
RMDIR [/ S] [/ Q] [lecteur:] chemin
Chemin RD [/ S] [/ Q] [lecteur:]
/ 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
Si vous utilisez PowerShell , vous pouvez utiliser Remove-Item( ce qui est à aliasé del, erase, rd, ri, rmet rmdir) et prend un -Recurseargument qui peut être court - circuitée-r
Il convient de souligner que pour un grand nombre de fichiers, rmdir / s / q est généralement beaucoup plus rapide que l'opération équivalente "sélectionner dir, déplacer + supprimer" dans l'explorateur.
Wedge
9
Cela ne supprime pas les fichiers, comme le fait rm -rf, et renvoie également une valeur non nulle lorsque le répertoire n'existe pas, donc rd /s /q foo && echo "yay"échouera si le répertoire "foo" n'existe pas.
Dirk Groeneveld
17
Et si dir. pas vide et certains fichiers obtiennent Access is deniedet d'autres The process cannot access the file because it is being used by another process?
Eugene
6
Je viens d'essayer cela en sept et vous devez faire / S et / Q (majuscules)
ford prefect
2
Mystifié ici. Je sais que j'ai essayé cette commande et cela n'a pas fonctionné s'il y avait des fichiers dans l'arborescence des répertoires; maintenant je reviens et. . . par magie, cela semble fonctionner. Quelqu'un d'autre a-t-il un comportement incohérent avec cela?!
Mon héros! Et une astuce: vous créez votre dossier vide dans C: \ empty, puis une fois à l'intérieur de chaque dossier fou, on peut juste fairerobocopy /mir c:\empty .
Léon Pelletier
Le takeownm'a aidé comme je l' ai copié du dossier système Linux avec rsync par erreur et j'ai eu aucun privilège de retirer ce dossier ... Pas même le robocopy a travaillé. Merci
Jarda
1
Très belle réponse. Ça marche. (toutes les autres réponses sur la page ne le font pas). Mais cacls est obsolète. Est-il possible de faire une réponse contemporaine, s'il vous plaît? La deuxième variante fonctionne déjà et n'est pas déconseillée.
Gangnus
Cela ne fait rien pour moi. Quelqu'un pourrait-il expliquer comment cela est censé fonctionner? (robocopy) - Il pourrait supprimer le contenu des dossiers, mais pas les dossiers eux
Ralf
114
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/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
La réponse acceptée est excellente, mais en supposant que vous avez installé Node, vous pouvez le faire beaucoup plus précisément avec la bibliothèque de nœuds "rimraf", qui permet des modèles globulaires. Si vous l'utilisez beaucoup (je le fais), installez-le simplement à l'échelle mondiale.
yarn global add rimraf
puis, par exemple, un motif que j'utilise constamment:
rimraf .\**\node_modules
ou pour une seule ligne qui vous permet d'esquiver l'installation globale, mais qui prend un peu plus de temps pour le téléchargement dynamique du package:
travaillé pour moi en combinaison avec rmdir / s / q car certains fichiers étaient verrouillés et rmdir échouerait sur ceux-ci. del / foldername a supprimé les fichiers verrouillés, ce qui a ensuite permis à rmdir de se débarrasser du répertoire racine. Agréable.
Il y a trois scénarios où rm -rfest couramment utilisé où il devrait revenir 0:
Le chemin spécifié n'existe pas.
Le chemin spécifié existe et est un répertoire.
Le chemin spécifié existe et est un fichier.
Je vais ignorer toute la question 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 mis ERRORLEVELà 0 et puis supprimez le chemin que si elle existe, à l' aide de différentes commandes selon si oui ou non il est un répertoire. IF EXISTn'est pas défini ERRORLEVELsur 0 si le chemin d'accès n'existe pas, il ERRORLEVELest donc nécessaire de définir d'abord sur 0 pour détecter correctement le succès d'une manière qui imite l' rm -rfutilisation normale . Protéger le RDavec IF EXISTest nécessaire car RD, contrairement à rm -f, va lancer une erreur si la cible n'existe pas.
L'extrait de script suivant suppose que DELPATH est précité. (C'est sûr lorsque vous faites quelque chose comme SET DELPATH=%1. Essayez de mettre ECHO %1un .cmdet de lui passer un argument avec des espaces dedans et voyez ce qui se passe par vous-même). Une fois l'extrait de code 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 fait est que tout est plus simple lorsque l'environnement est simplement conforme à POSIX. Ou si vous installez un MSYS minimal et que vous l'utilisez.
Vous pouvez installer GnuWin32 et utiliser les commandes * nix de manière native sur Windows. J'installe ceci avant d'installer quoi que ce soit d'autre sur une nouvelle copie de Windows à la menthe. :)
À UTILISER À VOS RISQUES ET PÉRILS. RENSEIGNEMENTS FOURNIS «TELS QUELS». NON TESTÉ EXTENSIFEMENT.
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 la plus grande prudence, vous pouvez facilement supprimer tous vos fichiers si vous n'y faites pas attention):
rd -r -include *.* -force somedir
Où se somedirtrouve le répertoire non vide que vous souhaitez supprimer.
Notez qu'avec des disques externes connectés ou des disques avec des problèmes, Windows se comporte parfois de manière étrange - il ne provoque pas d'erreur lors de la suppression (ou de toute tentative de copie), mais le répertoire n'est pas supprimé (ou non copié) comme indiqué. (J'ai trouvé que dans ce cas, au moins pour moi, la commande donnée par @n_y dans sa réponse produira des erreurs comme 'get-childitem: le fichier ou le répertoire est corrompu et illisible.' En conséquence dans PowerShell)
TARD MAIS RÉPONSE IMPORTANTE à toute personne qui a des problèmes pour installer les packages npm sur la machine Windows et si vous voyez une erreur disant " rm -rf..." commande introuvable. Vous pouvez utiliser le bash cli pour exécuter la commande rm sur Windows.
pour les utilisateurs de npm, vous pouvez modifier la configuration de npm de npm config set script-shell "C:\Program Files\Git\bin\bash.exe"cette façon si le package npm que vous essayez d'installer a un script de post-installation qui utilise la rm -rfcommande, vous pourrez exécuter cette rmcommande sans avoir à changer quoi que ce soit dans le package npm ou à désactiver la configuration des scripts de post-installation. (Par exemple, styled-componentsutilise la rmcommande dans leurs scripts de post-installation)
Si vous souhaitez simplement utiliser la rmcommande, vous pouvez facilement utiliser le bash et passer les arguments.
Alors oui, vous pouvez utiliser la commande 'rm' sur Windows.
Essayez simplement de réduire la longueur du chemin. ie :: Renommez tous les dossiers qui mènent à un tel fichier avec les plus petits noms possibles. Dites les noms d'une lettre. Continuez à renommer vers le haut dans la hiérarchie des dossiers. Par cela, u réduit efficacement la longueur du chemin. Maintenant, essayez enfin de supprimer le fichier immédiatement.
format c:
alors l'installation de Linux? Je plaisante bien sûr.Réponses:
RMDIR ou RD si vous utilisez l'invite de commande classique (cmd.exe):
Si vous utilisez PowerShell , vous pouvez utiliser
Remove-Item
( ce qui est à aliasédel
,erase
,rd
,ri
,rm
etrmdir
) et prend un-Recurse
argument qui peut être court - circuitée-r
la source
rd /s /q foo && echo "yay"
échouera si le répertoire "foo" n'existe pas.Access is denied
et d'autresThe process cannot access the file because it is being used by another process
?administrateur:
Fonctionne pour tout, y compris les fichiers sys
EDIT: J'ai en fait trouvé le meilleur moyen qui résout également le problème du chemin de fichier trop long:
la source
robocopy /mir c:\empty .
takeown
m'a aidé comme je l' ai copié du dossier système Linux avec rsync par erreur et j'ai eu aucun privilège de retirer ce dossier ... Pas même le robocopy a travaillé. MerciRMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/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
la source
Vous pouvez installer cygwin, qui a
rm
ainsi quels
etc.la source
Accédez au chemin et déclenchez cette commande.
/ s: supprime le répertoire spécifié et tous les sous-répertoires, y compris tous 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.
la source
Pour supprimer un répertoire (qu'il existe ou non), utilisez ce qui suit:
la source
rmdir /S /Q %DIRNAME%
la source
La réponse acceptée est excellente, mais en supposant que vous avez installé Node, vous pouvez le faire beaucoup plus précisément avec la bibliothèque de nœuds "rimraf", qui permet des modèles globulaires. Si vous l'utilisez beaucoup (je le fais), installez-le simplement à l'échelle mondiale.
puis, par exemple, un motif que j'utilise constamment:
ou pour une seule ligne qui vous permet d'esquiver l'installation globale, mais qui prend un peu plus de temps pour le téléchargement dynamique du package:
la source
Essayez cette commande:
la source
rmdir / s dirname
la source
Voyons d'abord ce qui
rm -rf
fait:Il y a trois scénarios où
rm -rf
est couramment utilisé où il devrait revenir0
:Je vais ignorer toute la question 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 mis
ERRORLEVEL
à 0 et puis supprimez le chemin que si elle existe, à l' aide de différentes commandes selon si oui ou non il est un répertoire.IF EXIST
n'est pas définiERRORLEVEL
sur 0 si le chemin d'accès n'existe pas, ilERRORLEVEL
est donc nécessaire de définir d'abord sur 0 pour détecter correctement le succès d'une manière qui imite l'rm -rf
utilisation normale . Protéger leRD
avecIF EXIST
est nécessaire carRD
, contrairement àrm -f
, va lancer une erreur si la cible n'existe pas.L'extrait de script suivant suppose que DELPATH est précité. (C'est sûr lorsque vous faites quelque chose comme
SET DELPATH=%1
. Essayez de mettreECHO %1
un.cmd
et de lui passer un argument avec des espaces dedans et voyez ce qui se passe par vous-même). Une fois l'extrait de code terminé, vous pouvez vérifier l'échec avecIF ERRORLEVEL 1
.Le fait est que tout est plus simple lorsque l'environnement est simplement conforme à POSIX. Ou si vous installez un MSYS minimal et que vous l'utilisez.
la source
via Powershell
via l'invite de commande
https://stackoverflow.com/a/35731786/439130
la source
Voici ce que tu dois 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 dansC:\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éfautHKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
avec la valeur suivante"c:\windows\REMOVE.bat" "%1"
C'est ça! Vous pouvez maintenant cliquer avec le bouton droit sur n'importe quel répertoire et utiliser la fonction RMDIR
la source
Utilisation de Powershell 5.1
Remplacez les journaux par le nom du répertoire que vous souhaitez supprimer.
get-childitem recherche le répertoire des enfants avec le nom récursivement à partir du chemin actuel (.).
remove-item supprime le résultat.
la source
Vous pouvez installer GnuWin32 et utiliser les commandes * nix de manière native sur Windows. J'installe ceci avant d'installer quoi que ce soit d'autre sur une nouvelle copie de Windows à la menthe. :)
la source
À UTILISER À VOS RISQUES ET PÉRILS. RENSEIGNEMENTS FOURNIS «TELS QUELS». NON TESTÉ EXTENSIFEMENT.
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 la plus grande prudence, vous pouvez facilement supprimer tous vos fichiers si vous n'y faites pas attention):
Où se
somedir
trouve le répertoire non vide que vous souhaitez supprimer.Notez qu'avec des disques externes connectés ou des disques avec des problèmes, Windows se comporte parfois de manière étrange - il ne provoque pas d'erreur lors de la suppression (ou de toute tentative de copie), mais le répertoire n'est pas supprimé (ou non copié) comme indiqué. (J'ai trouvé que dans ce cas, au moins pour moi, la commande donnée par @n_y dans sa réponse produira des erreurs comme 'get-childitem: le fichier ou le répertoire est corrompu et illisible.' En conséquence dans PowerShell)
la source
TARD MAIS RÉPONSE IMPORTANTE à toute personne qui a des problèmes pour installer les packages npm sur la machine Windows et si vous voyez une erreur disant "
rm -rf...
" commande introuvable. Vous pouvez utiliser le bash cli pour exécuter la commande rm sur Windows.pour les utilisateurs de npm, vous pouvez modifier la configuration de npm de
npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
cette façon si le package npm que vous essayez d'installer a un script de post-installation qui utilise larm -rf
commande, vous pourrez exécuter cetterm
commande sans avoir à changer quoi que ce soit dans le package npm ou à désactiver la configuration des scripts de post-installation. (Par exemple,styled-components
utilise larm
commande dans leurs scripts de post-installation)Si vous souhaitez simplement utiliser la
rm
commande, vous pouvez facilement utiliser le bash et passer les arguments.Alors oui, vous pouvez utiliser la commande 'rm' sur Windows.
la source
Voici ce qui a fonctionné pour moi:
Essayez simplement de réduire la longueur du chemin. ie :: Renommez tous les dossiers qui mènent à un tel fichier avec les plus petits noms possibles. Dites les noms d'une lettre. Continuez à renommer vers le haut dans la hiérarchie des dossiers. Par cela, u réduit efficacement la longueur du chemin. Maintenant, essayez enfin de supprimer le fichier immédiatement.
la source
Il y a aussi deltree si vous utilisez une ancienne version de Windows.
J'aime vraiment ce site pour trouver des commandes: SS64: Del - Supprimer les fichiers
la source
del / s / q directorytobedeleted
la source