¿Puedo ignorar los archivos dot con la finalización de la pestaña cmd.exe?

¿Puedo ignorar los archivos dot con la finalización de la pestaña cmd.exe?

Desafortunadamente, necesito trabajar con cmd.exe de vez en cuando y, por lo general, no me molesta demasiado, excepto cuando estoy editando un archivo en vim y luego intento ejecutar ese archivo con tabulación.

Si tengo el archivo foo.pyabierto en vim, .foo.py.swptambién existe en el directorio. El comportamiento que veo es:

C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py

Esto es bastante exasperante y me pregunto si hay alguna forma de evitar este comportamiento, salvo una solución alternativa completa, como cambiar el nombre de mi archivo de intercambio o usar PowerShell. Noté que PowerShell no emula este comportamiento, pero realmente no quiero usarlo.

Respuesta1

Windows se comporta exactamente como cabría esperar si lo piensas detenidamente (y, para ser honesto, hasta que vi tu pregunta, no lo había pensado completamente). Un nombre de archivo que comienza con '.' se ve como un archivo con un nombre de archivo nulo con una extensión. Para ver cómo funciona esto, cree un directorio y luego cree los siguientes archivos usando touch(supongo que está familiarizado con touch):

touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb

Ahora, en ese directorio, use la tabtecla para recorrer los archivos y verá que la secuencia es:

.a.aaa
.b.bbb
a.aaa
b.bbb

Si desea revisar los archivos 'a', escriba 'a' antes de taby obtendrá un archivo , predecible .a.aaa.a.aaa

En cuanto al _carácter en el nombre de un archivo, es como cualquier otro carácter y se ordena después de 'Z'.

Respuesta2

La semántica de FindFirstFile (lo que CMD usa para enumerar archivos coincidentes) significa que el patrón se prueba con el nombre de archivo largo (lo que le gustaría ver), así como con el nombre de archivo "8.3" generado automáticamente. La generación de nombres cortos es lo que está provocando coincidencias falsas.

Puede deshabilitar la generación 8.3 a través de FSUTIL, pero eso detiene la generación ADICIONAL y no elimina los nombres ya existentes. Tendría que ejecutar un script que cambiaría el nombre para eliminarlos por completo.

Sin embargo, esto es peligroso, ya que algunos programas no tienen ni idea y escribirán los nombres cortos generados automáticamente (digamos que está utilizando un instalador de 16 bits, como las versiones antiguas de MSOFFICE). Si desactiva su generación, estos instaladores pueden fallar.

información relacionada