Disons, il existe une variable appelée %pathtofolder%
, car elle indique clairement qu'il s'agit du chemin complet d'un dossier.
Je souhaite supprimer tous les fichiers et sous-dossiers de ce répertoire, mais pas le répertoire lui-même.
Mais, il pourrait y avoir une erreur comme «ce fichier / dossier est déjà utilisé» ... lorsque cela se produit, il devrait simplement continuer et ignorer ce fichier / dossier.
Y a-t-il une commande pour cela?
rm -rf path\to\folder
fonctionne dans Windows 10 (ou pourrait provenir de Git Bash ... de toute façon si vous avez que ça vaut la peine d'essayer!)Réponses:
Vous pouvez utiliser ce script shell pour nettoyer le dossier et les fichiers dans la
C:\Temp
source :Créez un fichier de commandes (par exemple, delete.bat) contenant la commande ci-dessus. Accédez à l'emplacement où se trouve le fichier delete.bat, puis exécutez la commande: delete.bat
la source
%p
rmdir
est ma commande préférée de tous les temps pour le travail. Il fonctionne pour supprimer des fichiers et des dossiers énormes avec des sous-dossiers. Aucune sauvegarde n'est créée, assurez-vous donc d'avoir copié vos fichiers en toute sécurité avant d'exécuter cette commande.Cela supprime silencieusement le dossier et tous les fichiers et sous-dossiers.
la source
md FOLDERNAME
(voir la réponse de @rakoczyn ci-dessous).cd "FOLDERNAME"
RD . /S /Q
La solution la plus simple à laquelle je pense est de supprimer tout le répertoire avec
Ensuite, créez à nouveau ce répertoire:
la source
Cela supprimera les dossiers et les fichiers et laissera le dossier derrière.
la source
2>nul
, il affiche "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus."RD /?
vous montrera le moyen simple de vider un dossier.CD mypath && RD /S .
cela suffirait tout simplement . Je n'aime pas que vous deviez répéter votre chemin deux fois cependant, pour les longs chemins, il devient difficile à lire. Je voudrais donc simplement ajouter unset p="mypath"
au début.... supprime tous les fichiers et dossiers sous le répertoire donné, mais pas le répertoire lui-même.
la source
/A
de supprimer également les fichiers avec un ensemble d'attributs cachés et%dir%\*
doit être placée entre guillemets, comme"%dir%\*"
pour fonctionner également pour les répertoires contenant un espace ou l'un de ces caractères&()[]{}^=;!'+,`~
. Et la ligne de commande FOR doit être modifiée enfor /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"
car FOR ignore les répertoires avec un ensemble d'attributs masqués. DIR avec options/AD /B
affiche tous les répertoires avec uniquement leurs noms. BTW:dir
n'est pas un bon nom pour une variable d'environnement.Vous obtiendrez un message d'erreur, vous indiquant que la commande RMDIR ne peut pas accéder au dossier actuel, donc elle ne peut pas le supprimer.
Mise à jour :
À partir de ce commentaire utile (merci à Moritz Both ), vous pouvez ajouter
&&
entre, doncRMDIR
ne s'exécutera pas si laCD
commande échoue (par exemple, nom de répertoire mal saisi):Depuis la référence de la ligne de commande Windows :
la source
cd [Your_Folder]
super critique - je dois m'en souvenir pour ne pas supprimer le répertoire lui-même ...&&
entre les commandes au lieu du saut de ligne et vous êtes à l'abri d'un CD défaillant.RD signifie REMOVE Directory.
/ S: supprime tous les fichiers et sous-dossiers en plus du dossier lui-même. Utilisez-le pour supprimer une arborescence de dossiers entière.
/ Q: Silencieux - n'affiche pas la confirmation YN
Exemple :
la source
/S
que cela/Q
signifierd
équivautrmdir
et supprimera le répertoire lui-même et n'est pas ce que OP souhaite.J'utilise Powershell
Il supprimera le contenu du dossier, pas le dossier lui-même.
la source
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Aucune des réponses publiées le 2018-06-01, à l'exception de la ligne de commande unique publiée par foxidrive , n'a vraiment supprimé tous les fichiers et tous les dossiers / répertoires de
%PathToFolder%
. C'est la raison de publier une réponse de plus avec une seule ligne de commande très simple pour supprimer tous les fichiers et sous-dossiers d'un dossier ainsi qu'un fichier de commandes avec une solution plus complexe expliquant pourquoi toutes les autres réponses publiées le 2018-06-01 en utilisant DEL et FOR avec RD n'a pas réussi à nettoyer complètement un dossier.La solution simple de ligne de commande unique qui bien sûr peut également être utilisée dans un fichier batch:
Cette ligne de commande contient trois commandes exécutées l'une après l'autre.
La première commande PUSHD pousse le chemin du répertoire actuel sur la pile et fait ensuite
%PathToFolder%
le répertoire actuel pour l'exécution du processus de commande.Cela fonctionne également pour les chemins UNC par défaut car les extensions de commande sont activées par défaut et dans ce cas PUSHD crée une lettre de lecteur temporaire qui pointe vers cette ressource réseau spécifiée, puis modifie le lecteur et le répertoire actuels, en utilisant la lettre de lecteur nouvellement définie.
PUSHD affiche le message d'erreur suivant pour gérer STDERR si le répertoire spécifié n'existe pas du tout:
Ce message d'erreur est supprimé en le redirigeant
2>nul
vers le périphérique NUL .La prochaine commande RD n'est exécutée que si le changement du répertoire en cours pour le processus de commande en cours vers le répertoire spécifié a réussi, c'est-à-dire que le répertoire spécifié existe.
La commande RD avec les options
/Q
et/S
supprime discrètement un répertoire avec tous les sous - répertoires même si le répertoire spécifié contient des fichiers ou des dossiers avec un attribut masqué ou avec un ensemble d'attributs en lecture seule. L'attribut système n'empêche jamais la suppression d'un fichier ou d'un dossier.Les éléments non supprimés sont:
Dossiers utilisés comme répertoire courant pour tout processus en cours d'exécution. L'arborescence de dossiers complète d'un tel dossier ne peut pas être supprimée si un dossier est utilisé comme répertoire actuel pour tout processus en cours d'exécution.
Fichiers actuellement ouverts par tout processus en cours d'exécution avec des autorisations d'accès aux fichiers définies sur le fichier ouvert pour empêcher la suppression du fichier lorsqu'il est ouvert par l'application / le processus en cours d'exécution. Un tel fichier ouvert empêche également la suppression de l'arborescence de dossiers entière dans le fichier ouvert.
Fichiers / dossiers sur lesquels l'utilisateur actuel n'a pas les autorisations (NTFS) requises pour supprimer le fichier / dossier, ce qui empêche également la suppression de l'arborescence de dossiers dans ce fichier / dossier.
La première raison de ne pas supprimer un dossier est utilisée par cette ligne de commande pour supprimer tous les fichiers et sous-dossiers du dossier spécifié, mais pas le dossier lui-même. Le dossier devient temporairement le répertoire courant pour l'exécution du processus de commande, ce qui empêche la suppression du dossier lui-même. Bien sûr, cela entraîne la sortie d'un message d'erreur par la commande RD :
Fichier est le mauvais terme ici car en réalité le dossier est utilisé par un autre processus, le processus de commande actuel qui a exécuté la commande RD . Eh bien, en réalité , un dossier est pour le système de fichiers , un fichier spécial avec l' attribut de fichier répertoire qui explique ce message d'erreur. Mais je ne veux pas aller trop loin dans la gestion du système de fichiers.
Ce message d'erreur, comme tous les autres messages d'erreur, qui peuvent survenir pour les trois raisons écrites ci-dessus, est supprimé en le redirigeant avec
2>nul
du handle STDERR vers le périphérique NUL .La troisième commande, POPD , est exécutée indépendamment de la valeur de sortie de la commande RD .
POPD fait sortir le chemin du répertoire poussé par PUSHD de la pile et change le répertoire courant pour exécuter le processus de commande dans ce répertoire, c'est-à-dire restaure le répertoire courant initial. POPD supprime la lettre de lecteur temporaire créée par PUSHD dans le cas d'un chemin de dossier UNC.
Remarque: POPD peut échouer en silence pour restaurer le répertoire courant initial dans le cas où le répertoire courant initial était un sous-répertoire du répertoire à nettoyer qui n'existe plus. Dans ce cas particulier
%PathToFolder%
reste le répertoire courant. Il est donc conseillé d'exécuter la ligne de commande ci-dessus et non à partir d'un sous-répertoire de%PathToFolder%
.Un autre fait intéressant : j'ai essayé la ligne de commande en utilisant également un chemin UNC en partageant le répertoire local
C:\Temp
avec le nom de partageTemp
et en utilisant le chemin UNC\\%COMPUTERNAME%\Temp\CleanTest
affecté à la variable d'environnementPathToFolder
sous Windows 7. Si le répertoire en cours d'exécution de la ligne de commande est un sous-répertoire d'un local partagé le dossier auquel on accède en utilisant le chemin UNC, c'est-à-direC:\Temp\CleanTest\Subfolder1
,Subfolder1
est supprimé par RD , et POPD suivant échoue silencieusement àC:\Temp\CleanTest\Subfolder1
refaire le répertoire courant, ce quiZ:\CleanTest
reste le répertoire courant pour le processus de commande en cours. Donc, dans ce cas très, très spécial, la lettre de lecteur temporaire reste jusqu'à ce que le répertoire actuel soit modifié, par exemple aveccd /D %SystemRoot%
qui donne un répertoire local réellement existant. Malheureusement POPDne quitte pas avec une valeur supérieure à 0 s'il ne parvient pas à restaurer le répertoire courant initial, ce qui rend impossible la détection de cette condition d'erreur très spéciale en utilisant uniquement le code de sortie de POPD . Cependant, on peut supposer que personne ne rencontre jamais ce cas d'erreur très spécial car les chemins UNC ne sont généralement pas utilisés pour accéder aux fichiers et dossiers locaux.Pour mieux comprendre les commandes utilisées, ouvrez une fenêtre d'invite de commandes, exécutez-y les commandes suivantes et lisez très attentivement l'aide affichée pour chaque commande.
pushd /?
popd /?
rd /?
Une seule ligne avec plusieurs commandes utilisant un fichier batch Windows explique les opérateurs
&&
et&
utilisés ici.Voyons maintenant la solution de fichiers batch en utilisant la commande DEL pour supprimer les fichiers dans
%PathToFolder%
et FOR et RD pour supprimer les sous-dossiers dans%PathToFolder%
.Le fichier de commandes vérifie d'abord que la variable d'environnement
PathToFolder
est vraiment définie avec un chemin de dossier sans guillemets doubles et sans barre oblique inversée à la fin. La barre oblique inverse à la fin ne serait pas un problème, mais les guillemets doubles dans un chemin de dossier pourraient être problématiques en raison de la valeur dePathToFolder
est concaténée avec d'autres chaînes pendant l'exécution du fichier de commandes.Les deux lignes sont importantes:
La commande DEL est utilisée pour supprimer tous les fichiers du répertoire spécifié.
/A
est nécessaire pour traiter vraiment tous les fichiers, y compris les fichiers avec l'attribut caché que DEL ignorerait sans utiliser l'option/A
./F
est nécessaire pour forcer la suppression des fichiers avec le jeu d'attributs en lecture seule./Q
est nécessaire pour exécuter une suppression discrète de plusieurs fichiers sans demander à l'utilisateur si plusieurs fichiers doivent vraiment être supprimés.>nul
est nécessaire pour rediriger la sortie des noms de fichiers écrits pour gérer STDOUT vers le périphérique NUL qui ne peut pas être supprimé car un fichier est actuellement ouvert ou l'utilisateur n'a pas l'autorisation de supprimer le fichier.2>nul
est nécessaire pour rediriger la sortie du message d'erreur pour chaque fichier qui ne peut pas être supprimé de la poignée STDERR vers le périphérique NUL .Les commandes FOR et RD sont utilisées pour supprimer tous les sous-répertoires du répertoire spécifié. Mais
for /D
n'est pas utilisé car FOR ignore dans ce cas les sous-répertoires avec l'attribut caché défini. Pour cette raison,for /F
est utilisé pour exécuter la ligne de commande suivante dans un processus de commande distinct démarré en arrière-plan avec%ComSpec% /c
:Les sorties DIR au format nu en raison des
/B
entrées de répertoire avec attributD
, c'est-à-dire les noms de tous les sous-répertoires dans le répertoire spécifié indépendamment des autres attributs comme l'attribut caché sans chemin.2>nul
est utilisé pour rediriger la sortie du message d'erreur par DIR sur aucun répertoire trouvé du handle STDERR vers le périphérique NUL .L'opérateur de redirection
>
doit être échappé avec le caractère caret,,^
sur la ligne de commande FOR pour être interprété comme un caractère littéral lorsque l'interpréteur de commandes Windows traite cette ligne de commande avant d'exécuter la commande FOR qui exécute ladir
ligne de commande intégrée dans un processus de commande distinct démarré en arrière-plan.FOR traite la sortie capturée écrite pour gérer STDOUT d'un processus de commande démarré qui sont les noms des sous-répertoires sans chemin et jamais entre guillemets.
FOR avec option
/F
ignore les lignes vides qui ne se produisent pas ici car DIR avec option/B
ne produit pas de lignes vides.FOR ignorerait également les lignes commençant par un point-virgule qui est le caractère de fin de ligne par défaut. Un nom de répertoire peut commencer par un point-virgule. Pour cette raison,
eol=|
est utilisé pour définir le caractère de barre verticale comme le caractère de fin de ligne qu'aucun répertoire ou fichier ne peut avoir dans son nom.FOR diviserait la ligne en sous-chaînes en utilisant l'espace et la tabulation horizontale comme délimiteurs et affecterait uniquement la première chaîne délimitée par un espace / tabulation à la variable de boucle spécifiée
I
. Ce comportement de fractionnement n'est pas souhaité ici car un nom de répertoire peut contenir un ou plusieurs espaces. Par conséquent,delims=
est utilisé pour définir une liste vide de délimiteurs pour désactiver le comportement de fractionnement de ligne et être affecté à la variable de boucleI
, toujours le nom complet du répertoire.La commande FOR exécute la commande RD pour chaque nom de répertoire sans chemin d'accès. C'est la raison pour laquelle sur la ligne de commande RD , le chemin d'accès au dossier doit être spécifié à nouveau, ce qui est concaténé avec le nom du sous-dossier.
Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez une fenêtre d'invite de commandes, exécutez-y les commandes suivantes et lisez très attentivement toutes les pages d'aide affichées pour chaque commande.
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rd /?
rem /?
set /?
setlocal /?
la source
Utilisez le Bloc-notes pour créer un document texte et copiez / collez ceci:
Sélectionnez Enregistrer sous et nom de fichier:
Enregistrer en tant que type: tous les fichiers et cliquez sur le Save bouton.
Il fonctionne sur tout type de compte (administrateur ou utilisateur standard). Lancez-le!
J'utilise une variable temporaire dans cet exemple, mais vous pouvez en utiliser n'importe quelle autre! PS: pour Windows OS uniquement!
la source
Pour supprimer un fichier:
Pour supprimer un dossier contenant tous les fichiers:
Supprimer tous les fichiers d'un dossier spécifique (sans supprimer le dossier lui-même) est un peu compliqué.
del /s *.*
ne peut pas supprimer les dossiers, mais supprime les fichiers de tous les sous-dossiers. Il faut donc deux commandes:la source
/A
de supprimer également les fichiers avec le jeu d'attributs masqués et l'option/F
de supprimer également les fichiers avec le jeu d'attributs en lecture seule et les guillemets doubles autour du dernier argument. Cedel /A /F /Q "PATH_TO_FOLDER\*"
serait mieux. Et la ligne de commande FOR doit être modifiée enfor /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"
car FOR ignore les répertoires avec un ensemble d'attributs masqués. DIR avec options/AD /B
affiche tous les répertoiresPATH_TO_FOLDER
avec uniquement leurs noms.Vous pouvez le faire en utilisant la commande suivante pour supprimer tout le contenu et le dossier parent lui-même:
la source
J'ai essayé plusieurs de ces approches, mais aucune n'a fonctionné correctement.
J'ai trouvé cette approche en deux étapes sur la ligne de commande Windows du site :
Cela a fonctionné exactement comme j'avais besoin et comme spécifié par l'OP.
la source
forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file"
DEL/A
est ajoutée pour supprimer également les fichiers avec un attribut masqué, sinon DEL afficherait un message d'erreur introuvable pour chaque fichier masqué dans%pathtofolder%
. L' option DEL/F
est ajoutée pour supprimer également les fichiers dont l'attribut en lecture seule est défini%pathtofolder%
, sinon DEL afficherait un message d'erreur d'accès refusé.cmd.exe
instance pour chaque fichier et chaque répertoire dans%pathtofolder%
. L'avantage est que FORFILES n'ignore pas les répertoires dont l'attribut masqué est défini comme FOR .la source
for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"
car FOR ignore les répertoires avec un ensemble d'attributs masqués. DIR avec options/AD /B
affiche tous les répertoires%TEMP%
avec uniquement leurs noms.Utilisation:
Cela supprime tous les fichiers et sous-dossiers
%pathtofolder%
, y compris les fichiers en lecture seule, et ne demande pas de confirmation.la source