Eliminar todos los archivos que no coinciden con cierto patrón - línea de comando de Windows


12

Eliminar elementos a través de la línea de comandos es bastante fácil.

del /options filename.extension

Ahora, supongamos que quiero eliminar todos los archivos que no terminan con .jpg en una carpeta, ¿cómo lo haría?

La cuestión es que tengo un software que convierte todas las imágenes especificadas a .jpg, pero deja los originales, que ya no necesito.

Sería mucho más eficiente ejecutar una sola declaración, en comparación con hacer varias declaraciones para cada tipo de archivo diferente.

Respuestas:


14

Lo haría así:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Esto hará que todos los archivos JPG sean de solo lectura, eliminará todo lo demás (omitirá automáticamente los archivos de solo lectura) y luego hará que los archivos JPG se puedan volver a escribir.


Trabajó como un campeón. Nota: simplemente agregue /sa cada línea para incluir recursivamente archivos en subdirectorios.
Chuck Wilbur

9

Eso es realmente bastante fácil.

Deberá foriterar sobre los archivos y luego simplemente buscar la extensión:

for %f in (*) do if not %~xf==.jpg del "%f"

debería hacer el truco (código aquí ).


gracias, pero eso solo depende del mapa que esté usando.
KdgDev

44
¿Mapa?
Joey

¿Cómo digo si no .jpg y no .jsp y no .xml entonces del?
user1164061

1

Powershell al rescate
En tiempos de Windows 7/8 es el sucesor de la buena línea de comando antigua

Del C:\myFolder\* -exclude '*.jpg'

Deles un alias para Remove-Item. Tiene varias opciones como recurse, incluir, excluir y filtrar (use esto para RegEx)

Debe agregar \*para incluir archivos en una carpeta determinada


Desde el indicador CMD, esto debería funcionar:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi

Nota: PowerShell viene con Win 7/8. Para Windows XP o Vista, debe descargarlo e instalarlo.
Iszi

1

Sé que no está respondiendo tu pregunta directamente, pero ¿has mirado las opciones en tu convertidor para ver si:

  1. Puede borrar los originales en sí

o

  1. ¿Escribir los .jpg en una nueva carpeta?

No tengo la opción directa para hacerlo. Lo que hará es sobrescribir el original si ese era un JPG para empezar. Pero todos los demás permanecen en el disco mientras se crea un JPG de ellos.
KdgDev

@WebDevHobo: bueno, entonces iría con la sugerencia de Johannes.
ChrisF

0

Estaba buscando una manera de encontrar todos los archivos que NO tenían la extensión ".mp3" en un directorio TREE en Windows 7 (volumen NTFS) que contiene quizás 20,000 archivos en varios cientos de directorios de varias profundidades ... así que después de un poco de angustia, solía:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

esto enumeró los archivos que no coincidían con el .mp3 después de eliminar todo lo relacionado con la salida del comando DIR ... 99% funciona ... a menos que el archivo que no coincida se llame una de las palabras clave en la salida DIR estándar - tal vez hay una manera de hacer que el informe DIR tenga menos información de encabezado / resumen, pero no me molesté ya que esto llegó casi todo el camino.


aparentemente, el código de publicación aquí elimina algunos caracteres especiales ... por lo que el comando "cd" anterior estaba en una línea por sí mismo y especificaba el directorio raíz de destino, y el primer comando "buscar" eliminó las líneas que contenían "<" DIR "> "(vaya a la figura) ya que ese es el resultado del comando dir, pero el código postal aquí puede pensar que es una especie de
metainstrucción

1
Hay una manera mucho más fácil de hacer esto: la /bbandera del dircomando. dir /benumerará nombres de archivo y extensiones solo en el directorio actual, dir /s /benumerará los nombres completos de todos los archivos en el actual y todos los subdirectorios. Recordar en find /vlugar de un forbucle es un buen toque que tendré que recordar, pero no creo que funcione del.
Bob

0

A continuación, se muestra otra forma de eliminar todos los archivos que coinciden con un nombre de archivo. La lista de bucles for contiene todos los archivos y si NO coincide por nombre de archivo (sin nombre de directorio).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
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.