108 votes

Supprimez tous les fichiers d'un type spécifique (extension) de manière récursive dans un répertoire en utilisant un fichier batch.

Je dois supprimer tous les fichiers .jpg et .txt (par exemple) dans les répertoires 1 et 2.

Ce que j'ai essayé, c'est :

@echo off
FOR %%p IN (C:\testFolder D:\testFolder) DO FOR %%t IN (*.jpg *.txt) DO del /s %%p\%%t

Dans certains répertoires, cela a fonctionné, dans d'autres non.

Par exemple, ceci n'a rien fait :

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

Qu'est-ce que j'ai manqué dans le deuxième extrait ? Pourquoi ça n'a pas marché ?

270voto

Laf Points 3086

Vous pouvez utiliser des caractères génériques avec l'option del et /S pour le faire de manière récursive.

del /S *.jpg

Anexo

@BmyGuest a demandé pourquoi une réponse déclassée ( del /s c:\*.blaawbg ) était différente de ma réponse.

Il y a un énorme différence entre la course del /S *.jpg y del /S C:\*.jpg . La première commande est exécutée à partir de l'emplacement actuel tandis que la seconde est exécutée sur tout le trajet .

Dans le scénario où vous supprimez jpg en utilisant la deuxième commande, certaines applications pourraient cesser de fonctionner, et vous finirez par perdre toutes vos photos de famille. C'est tout à fait ennuyeux, mais votre ordinateur pourra toujours fonctionner.

Cependant, si vous travaillez sur un projet, et que vous voulez supprimer tous vos dll fichiers dans myProject\dll et exécutez le fichier batch suivant :

@echo off

REM This short script will only remove dlls from my project... or will it?

cd \myProject\dll
del /S /Q C:\*.dll

Ensuite, vous finissez par supprimer tous dll de vos fichiers C:\ conduire. Toutes vos applications cessent de fonctionner, votre ordinateur devient inutilisable et, au prochain redémarrage, vous êtes téléporté dans la quatrième dimension où vous resterez coincé pour l'éternité.

La leçon à tirer ici est de ne pas exécuter une telle commande directement à la racine d'un lecteur (ou à tout autre endroit qui pourrait être dangereux, tel que %windir% ) si vous pouvez l'éviter. Faites-les toujours fonctionner aussi localement que possible.

Addendum 2

La méthode des caractères génériques essaiera de faire correspondre tous les noms de fichiers, dans leur format 8.3, et dans leur format "nom long". Par exemple, *.dll correspondra à project.dll et project.dllold ce qui peut être surprenant. Voir cette réponse sur SU pour des informations plus détaillées.

9voto

StackBuck Points 305

Vous pouvez l'utiliser pour supprimer TOUS les fichiers d'un dossier et de ses sous-dossiers :

DEL "C:\Folder\*.*" /S /Q

Ou utilisez cette option pour supprimer uniquement certains types de fichiers :

DEL "C:\Folder\*.mp4" /S /Q 
DEL "C:\Folder\*.dat" /S /Q

5voto

Pyroglyph Points 176

J'ai écrit un lot script il y a quelque temps qui vous permet de choisir une extension de fichier à supprimer. Le script va chercher dans le dossier dans lequel il se trouve et dans tous les sous-dossiers tout fichier avec cette extension et le supprimer.

@ECHO OFF
CLS

SET found=0
ECHO Enter the file extension you want to delete...
SET /p ext="> "

IF EXIST *.%ext% (           rem Check if there are any in the current folder :)
  DEL *.%ext%
  SET found=1
)
FOR /D /R %%G IN ("*") DO (  rem Iterate through all subfolders
  IF EXIST %%G CD %%G
  IF EXIST *.%ext% (
    DEL *.%ext%
    SET found=1
  )
)

IF %found%==1 (
  ECHO.
  ECHO Deleted all .%ext% files.
  ECHO.
) ELSE (
  ECHO.
  ECHO There were no .%ext% files.
  ECHO Nothing has been deleted.
  ECHO.
)

PAUSE
EXIT

J'espère que cela sera utile à tous ceux qui le souhaitent :)

1voto

The Long Nguyen Points 74

Je n'ai pas assez de réputation pour ajouter un commentaire, alors j'ai posté ceci comme une réponse. Mais pour le problème original avec cette commande :

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

Le premier For manque de syntaxe récursive, il devrait l'être :

@echo off
FOR /R %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

Tu peux juste le faire :

FOR %%p IN (C:\Users\0300092544\Downloads\Ces_Sce_600) DO @ECHO %%p

pour montrer la sortie réelle.

0voto

ajcg Points 185

C'est ça :

@echo off

:: del_ext
call :del_ext "*.txt"
call :del_ext "*.png"
call :del_ext "*.jpg"

:: funcion del_ext
@echo off
pause
goto:eof
:del_ext
 set del_ext=%1
 del /f /q "folder_path\%del_ext%"
goto:eof

pd : remplacer folder_path par votre 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