Commande MS-DOS pour supprimer tous les fichiers sauf un

25

Existe-t-il une commande MS-DOS qui me permet de supprimer tous les fichiers sauf un?

Prenons comme exemple les fichiers suivants:

a.001  
a.002  
a.003  
a.exe  
a.c  

Existe-t-il une commande pour supprimer tous les fichiers sauf a.c?

nunos
la source

Réponses:

36

Vous pouvez utiliser les commandes foret ifpour accomplir cela:

for %i in (*) do if not "%~i" == a.c del "%~i"

Cela passe par le répertoire courant et compare chaque nom de fichier à ac S'il ne correspond pas, le fichier est supprimé.

Kevin
la source
+1 n'aurait jamais pensé utiliser ceci pour une simple suppression ... Plein de bonnes réponses ici!
William Hilsum
4
@Wil, lorsque vous commencez à utiliser forrégulièrement, vous trouvez toutes sortes de scénarios fous pour cela. :)
Kevin
4
@Mike, vous voulez que quelque chose comme "pour% i dans (A: \ Some \ Path \ *) fasse sinon% ~ nxi == ac del% i" Notez que le chemin se termine par *, pour obtenir les fichiers dans ce dossier , et que la comparaison est contre% ~ nxi, le nom sans chemin. Pour les boucles destructrices comme celle-ci, c'est une bonne idée de faire "for ... do echo% i" pour voir quels fichiers seront affectés avant d'exécuter la commande "for ... do if ... del% i".
Kevin
1
Meilleure utilisationdel "%i"
Mugen
1
Si vous avez besoin que l' IFinstruction soit insensible à la casse, remplacez-la par IF /I.
2018
16

Vous pouvez définir le fichier en lecture seule avant de tout supprimer

attrib +r a.c
del *.*
attrib -r a.c
feiht voleur
la source
10

Non, il n'y en a pas. Je créerais un répertoire, y copierais le fichier important, l'effacerais . et ramenez le fichier en arrière. Supprimez ensuite le fichier temporaire.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp
David Pfeffer
la source
1
+1 brut et techniquement @Feiht voleur dit une meilleure façon de le faire (donc aussi donné +1 là-bas), mais pour la vitesse, c'est la façon dont je le ferais.
William Hilsum
3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f
Carlos Gutiérrez
la source
1
quels sont les avantages []?
barlop
1
@barlop: %fpourrait avoir des espaces dans le nom de fichier.
paradroid
@paradroid non qui ne sera pas utile pour cela si [4 r] == [4 r] écho égal j'ai vu similaire fait par certains, comme avec. au lieu de []. Je pourrais deviner pourquoi, mais je préfère l'entendre de la part de quelqu'un qui le fait.
barlop
@barlop: Je n'ai aucune idée de ce que vous venez de taper ici, mais les crochets fonctionnent exactement comme les guillemets.
paradroid
@paradroid C: \> if [4 r] == [4 r] echo abc <ENTER> donne le résultat "r] == [4 était inattendu à ce moment." Alors que C: \> si "4 r" == "4 r" echo abc donne le résultat abc. Alors, qu'est-ce qui vous fait penser qu'ils fonctionnent d'une manière ou d'une autre comme les guillemets? Même C: \> si [ab] == [ab] echo abc <- ne fonctionne pas donne une erreur similaire. b] == [a était inattendu pour le moment. Alors, qu'est-ce qui vous fait penser qu'ils fonctionnent comme des guillemets?
barlop
1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d
Dark
la source
Je pense que ce serait probablement utile, si on expliquait ce qu'il fait. On dirait qu'il parcourt toute une arborescence de dossiers, c'est ce que je veux. %app_path%et %file%sont respectivement la racine de l'arbre à parcourir et le fichier à éviter. Quel est le ^, et pourquoi passons-nous quatre jetons par fichier à la Delcommande?
LarsH
0

Pour la vitesse, j'utilise delen :

delen /! a.c

TCC / LE a également unedelcommandeplus puissante:

del /[!a.c] *
paradroid
la source
del /[!a.c] *yeldsInvalid switch - "[!a.c]".
karlphillip
@karlphillip: Cela fonctionne très bien, "dans TCC / LE" .
paradroid
Aha! Je n'ai pas vu ce commentaire avant, merci frère.
karlphillip