Comando de MS-DOS para eliminar todos los archivos excepto uno


25

¿Existe un comando de MS-DOS que me permite eliminar todos los archivos excepto uno?

Considere como ejemplo los siguientes archivos:

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

¿Hay un comando para eliminar todos los archivos excepto a.c?

Respuestas:


36

Puede usar los comandos fory ifpara lograr esto:

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

Esto pasa por el directorio actual y compara cada nombre de archivo con ac Si no coincide, el archivo se elimina.


+1 nunca hubiera pensado en usar esto para una simple eliminación ... ¡Un montón de buenas respuestas aquí!
William Hilsum

44
@Wil, cuando comienzas a usarlo forregularmente, se te ocurren todo tipo de escenarios locos. :)
Kevin

44
@ Mike, quieres algo como "para% i en (A: \ Some \ Path \ *) si no% ~ nxi == ac del% i" Tenga en cuenta que la ruta termina en *, para obtener los archivos en esa carpeta , y que la comparación es contra% ~ nxi, el nombre sin ruta. Para destructivos para bucles como este, es una buena idea hacer "for ... do echo% i" para ver qué archivos se verán afectados antes de ejecutar el comando "for ... do if ... del% i".
Kevin

1
Mejor usodel "%i"
Mugen

1
Si necesita que la IFdeclaración no distinga entre mayúsculas y minúsculas, cámbiela por IF /I.
jep

16

Puede configurar el archivo para que se lea solo antes de eliminar todo

attrib +r a.c
del *.*
attrib -r a.c

10

No, no hay Haría un directorio, copiaría el archivo importante en él, lo borraría . y mueva el archivo hacia atrás. Luego elimine el archivo temporal.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1 crudo y técnicamente el ladrón @Feiht dice una mejor manera de hacerlo (así que también dio +1 allí), pero para la velocidad, esta es la forma en que lo haría.
William Hilsum

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
¿Qué beneficio tienen los []?
barlop

1
@barlop: %fpodría tener espacios en el nombre del archivo.
paradroid

@paradroid no, eso no ayudará para eso si [4 r] == [4 r] echo igual he visto algo similar hecho por algunos, como con. en lugar de []. Podría adivinar por qué, pero prefiero escucharlo de alguien que lo hace.
barlop

@barlop: No tengo idea de lo que acabas de escribir allí, pero los corchetes funcionan igual que las comillas.
paradroid

@paradroid C: \> if [4 r] == [4 r] echo abc <ENTER> da el resultado "r] == [4 fue inesperado en este momento". Mientras que C: \> if "4 r" == "4 r" echo abc da el resultado abc. Entonces, ¿qué te hace pensar que de alguna manera funcionan como las comillas? Incluso C: \> si [ab] == [ab] echo abc <- no funciona da un error similar. b] == [a fue inesperado en este momento. Entonces, ¿qué te hace pensar que funcionan como citas?
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

Creo que esto probablemente sería útil si se explicara lo que hace. Parece que atraviesa un árbol de carpetas completo, que es lo que quiero. %app_path%y %file%son la raíz del árbol para atravesar, y el archivo para evitar su eliminación, respectivamente. ¿Cuál es el ^y por qué estamos pasando cuatro tokens por archivo al Delcomando?
LarsH

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.