web-dev-qa-db-fra.com

Supprimez tous les fichiers de type spécifique (extension) dans un répertoire à l'aide d'un fichier de traitement par lots.

Je dois supprimer tous les fichiers .jpg et .txt (par exemple) dans dir1 et dir2.

Ce que j'ai essayé était:

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

Dans certains annuaires, cela fonctionnait. dans d'autres, cela n'a pas été le cas.

Par exemple, cela 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 qui me manque dans le deuxième extrait? Pourquoi ça n'a pas marché?

64
vexe

Vous pouvez utiliser des caractères génériques avec la commande del et /S le faire récursivement.

del /S *.jpg

Addenda

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

Il y a une énorme différence entre courir del /S *.jpg et 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 l'ensemble du lecteur .

Dans le cas où vous supprimeriez des fichiers jpg à l'aide de la deuxième commande, certaines applications pourraient ne plus fonctionner et vous risqueriez de perdre toutes vos photos de famille. C'est tout à fait ennuyeux, mais votre ordinateur pourra toujours fonctionner.

Toutefois, si vous travaillez sur un projet et souhaitez supprimer tous vos fichiers dll dans myProject\dll, et exécutez le fichier de commandes 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 supprimez tous les fichiers dll de votre fichier C:\ conduire. Toutes vos applications cessent de fonctionner, votre ordinateur devient inutile et lors du prochain redémarrage, vous êtes téléporté dans la quatrième dimension, où vous serez bloqué 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 potentiellement dangereux, tel que %windir%) si vous pouvez l'éviter. Toujours les exécuter aussi localement que possible.

166
Laf

Il y a quelque temps, j'ai écrit un script batch qui vous permet de choisir une extension de fichier à supprimer. Le script recherche dans le dossier dans lequel il se trouve et dans tous les sous-dossiers tous les fichiers portant cette extension et le supprime.

@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 :)

3
Pyroglyph

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

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

Ou utilisez ceci pour supprimer certains types de fichiers uniquement:

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

Je n'ai pas assez de réputation pour ajouter un commentaire, alors j'ai posté ceci comme 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 pour manque de syntaxe récursive, il devrait être:

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

Vous pouvez juste faire:

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

pour montrer la sortie réelle.

0
The Long Nguyen