3 votos

Comando DIR que ignora archivos con múltiples extensiones

Tengo un directorio que contiene un solo .exe que necesito para encontrar utilizando DIR. Sin embargo, también tengo los archivos en el mismo directorio que terminan en .vshost.exe. Siempre termino con ambos archivos coincidentes para mi *.exe patrón.

yo.e el directorio contiene test.exe y test.vshost.exe (ambos archivos tienen el mismo nombre, menos el de la extensión).

¿Cómo puedo coincidir con sólo la .exe, y no .vshost.exe? Me siento como este debería ser relativamente fácil de usar * y ? pero me parece que no puede encontrar mucho acerca de la exclusión de un archivo como este. Gracias.

3voto

Worthwelle Puntos 73

Esto, desafortunadamente, no es posible con sólo el DIR de comandos, sin embargo puede ser combinado con el FINDSTR comando.

Me estoy centrando en la cuestión más general, en lugar de la pregunta específica relacionada .exe archivos, pero se puede modificar fácilmente para reducirla.

El FINDSTR comando es compatible con la expresión regular de búsquedas en la salida que nos permite filtrar los archivos con más de un periodo en el nombre de archivo.

DIR /B | FINDSTR /V /R "[^\.]*\.[^\.]*\.[^\.]*$"

Yo sugeriría envolver en un FOR bucle de la siguiente manera para hacer algo con el archivo devuelto lista:

FOR /F "tokens=*" %%a IN ('DIR /B ^| FINDSTR /V /R "[^\.]*\.[^\.]*\.[^\.]*$"') DO ECHO %%a

Desglose

En esta explicación, <...> es un marcador de posición para las cosas que se explicarán más adelante. Es sólo allí para simplificar.

  • FOR /F "tokens=*" %%a IN ('<...>') DO ECHO %%a
    El uso de "tokens=*" o "delims=" en su FOR de bucle permite el procesamiento de los nombres de archivo con espacios. Reemplace ECHO %%a con cualquier comando(s) que desea ejecutar.
  • DIR /B
    El uso de la /B el interruptor en la DIR comando utiliza el formato simple, incluyendo sólo los nombres de archivo. Esto es necesario para que el FINDSTR comando para que funcione como queremos.
  • ^|
    Es importante para escapar de la | carácter cuando se usa en el comando de la porción de un FOR de bucle. De lo contrario, obtendrá un error de sintaxis porque piensa que usted está tratando de canalizar la incompleta FOR de bucle en algo más.
  • FINDSTR /V /R "<...>"
    El /V modificador indica FINDSTR a eliminar los partidos de la lista y el /R interruptor enciende la Expresión Regular de modo.
  • [^\.]*\.[^\.]*\.[^\.]*$
    • [^\.]* coincide con cualquier cadena de caracteres que no incluyen el . carácter.
    • \. va a coincidir con la . carácter.
    • $ es el "fin de línea", lo que significa que esta expresión regular debe ser al final del nombre de archivo. Esto nos permite coincidir los archivos con cualquier número de períodos en el nombre de archivo, tales como test.vhost.exe.bak.

Leer Más

0voto

user3416648 Puntos 21

Esto debería funcionar:

 dir *.exe /b | findstr /i ".*[^\.]*.*\.exe$"
 

en palabras: encuentre una cadena en los archivos .exe que no contenga un punto que no sea el que está en .exe

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: