cmd.exe: "del * .txt" también elimina * .txt1, etc. [duplicado]

8

Posible duplicado:
comando WinXP dir: ¿3 y 4 extensiones de caracteres son iguales?

Me ha molestado un comportamiento extraño de cmd.exe durante mucho tiempo (al menos WinXP y Windows7). Un comando como del *.txttambién eliminará *.txt1archivos (cualquier número de caracteres después de '.txt' lo hará). ¿Es este un error bien conocido o qué?

Comunidad
fuente

Respuestas:

8

¿Es algo conocido de vez en cuando?

Aquí hay una explicación del comportamiento , completa con una posible solución.

Resumen: proviene de la forma en que NTFS maneja nombres de archivo cortos (8.3), por compatibilidad con cosas más antiguas que no pueden manejar nombres de archivo largos "nuevos". dir /xse puede usar para ver el nombre de archivo corto, así:

C:\>dir /x *~*
 ...
02/25/2011  08:18 AM    <DIR>          DOCUME~1     Documents and Settings
05/28/2011  12:02 AM    <DIR>          PROGRA~1     Program Files
 ...

Las extensiones de más de tres caracteres simplemente se truncarán para su nombre de archivo corto; por lo que .txt1, .txtxtxtxt, .txt_file, etc, todos se convierten .txt.

Jim Davis
fuente
6

Los archivos con más de 4 letras en la extensión (y otras reglas, por supuesto, también se aplican), reciben un nombre corto, por ejemplo, "foo.txt1" tiene el nombre corto "foo ~ 1.txt". DEL(como DIRy posiblemente la mayoría de los otros cmd.execomandos incorporados) también funcionará con nombres cortos. Para una discusión sobre un tema relacionado, consulte aquí: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx

Christian.K
fuente
+1 para un enlace más autorizado que el mío.
Jim Davis el
2

¿Estaría esto en un sistema de archivos FAT / VFAT? Si es así, está siendo mordido por la piratería informática utilizada para representar nombres que no encajan en el esquema 8.3; hay una DIRopción que le muestra los nombres cortos maltratados, que comenzarán con el nombre real del archivo pero tienen un ~y un número antes de la extensión, luego la extensión tiene un límite de 3 caracteres. (Ejemplo: C:\Program Filesgeneralmente se traduce como C:\PROGRA~1). Un comodín puede coincidir inesperadamente con estos nombres. Esto no debería suceder en NTFS o (creo) en recursos compartidos de red. excepto que DOS aún no ha muerto, parece ...

geekosaur
fuente
2

Probablemente pueda usar el Forfilescomando para una solución alternativa

P.ej.

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

Solo coincide con txtterminaciones.

phuclv
fuente