Cuando lo ejecuto dir *.*
produce resultados inesperados. Incluso se enumeran archivos y carpetas sin ningún punto en sus nombres. Por ejemplo
C:\>dir *.*
Volume in drive C is System
Volume Serial Number is AC0A-29DA
Directory of C:\
14-03-2017 05:17 PM 8,192 ntuser.dat
03-01-2017 07:10 PM <DIR> Perl520
28-03-2017 10:13 AM <DIR> Program Files
28-03-2017 10:13 AM <DIR> Program Files (x86)
04-01-2017 03:25 PM <JUNCTION> Python27 [C:\Program Files\Anaconda]
06-02-2017 10:16 PM <DIR> SAP
28-03-2017 04:10 PM 152 useragent.log
03-01-2017 03:04 PM <DIR> Users
16-03-2017 04:24 PM <DIR> VM
22-03-2017 11:13 AM <DIR> Windows
2 File(s) 8,344 bytes
8 Dir(s) 270,172,966,912 bytes free
¿Porqué es eso? ¿Hay alguna manera de enumerar solo archivos con un punto?
.
gusta que tienen.
al final para muchos propósitos, incluido este..
carácter tienen un.
carácter implícito al final. - Puede tener una carpeta llamada "Blah.old", por ejemplo, y luego tendría una extensión de archivo tradicional de 3 letras; para el uso diario, aunque "Blah
" es lo mismo que "Blah.
" ya sea un archivo o una carpeta..
, y las etiquetas en los nombres DNS están separadas por.
( por lo tanto, el nombre de la zona DNS raíz es una sola etiqueta de longitud cero). Un hijo de la zona DNS raíz.
escom.
, y un hijo decom.
essuperuser.com.
, y así sucesivamente.Respuestas:
Estoy escribiendo esta respuesta porque OP ha enfatizado que:
El
DIR
comando proviene de un momento en que:Por lo tanto, según ese estándar,
*.*
significaba cualquiera que sea el nombre y la extensión . No significaba una cadena que contenía un ".", Que puede tener o no caracteres antes o después del "." .La política de Microsoft preserva la compatibilidad con versiones anteriores. Por lo tanto, esa interpretación de
*.*
se conserva.Pero en Windows PowerShell,
*.*
significa una cadena que contiene un ".", Que puede tener o no caracteres antes o después del "." .fuente
Folder.
" y una carpeta llamada "Folder
" se denominan de la misma manera, en lo que respecta a Windows.AA.BB
con <8 en la primera parte y <3 en la extensión? ¿Simplemente se rellena con espacios?¿Porqué es eso?
Uno podría encontrar una respuesta a " ¿Por qué es eso? " En el artículo sobre comodines :
Implicación . El último {punto} en un nombre de archivo / carpeta separa el nombre base y la extensión. Entonces
dir *.
muestra todos los elementos sin extensión ydir *.*
Muestra todos los elementos con una extensión de cero o más caracteres .Estrictamente hablando,
dir *.
muestra todos los elementos sin punto (.
) en el nombre . (BTW, Naming Files, Paths, and Namespaces El artículo de MSDN dice explícitamente que " es aceptable especificar un punto como primer carácter de un nombre ").¿Hay alguna manera de enumerar solo archivos con un punto?
No lo creo. Sin embargo, hay una solución alternativa con una expresión regular adecuada.
PowerShell (solución de alcance completo si se usa en una consola Powershell):
Cmd (solo una idea, puede requerir alguna elaboración):
Anexo: una bonificación y explicación
Una suposición intuitiva que
Name
se concatenaBaseName
yExtension
no se sostiene . La siguiente secuencia de comandos lo prueba con las características principalescmd
y el usoPowerShell
, y la extraña^..*\...*$
expresión regular se deriva de sus resultados.Salida :
Compare la definición de
BaseName
propiedad, diferente para archivos y carpetas:Mi respuesta original se basó en un malentendido imperdonable:
Leerdir /?
, usardir /A:-D
:Otro enfoque: aplicarfindstr
regex comodir *.* | findstr /V "<.*>"
fuente
*.*
coincide con todos los archivos , como se indica en la pregunta.
gusta.dbus-keyrings
,.VirtualBox
y.vscode
.dir /A:-D
, ¿ enumera solo los archivos que son felices?dir /A:-D
Es incorrecto. 1 / enumera archivos sin extensión. 2 / no enumera los directorios que tienen un.
nombre (perfectamente legal)Puede hacer coincidir los nombres de archivo con un punto utilizando el comodín indocumentado
<
, que coincide con una secuencia de 0 o más caracteres en el nombre base o una secuencia de 0 o más caracteres en la extensión:Recuerde que
<
también es un metacarácter, por lo que debe citarlo o escapar de él cada vez que lo use en un patrón desde el shell de comandos.fuente
El intérprete de línea de comandos verá " . " Como "Todos los nombres de archivo base" con "todas las extensiones". Una extensión en blanco sigue siendo una extensión , por lo que coincidirá y se devolverá con la lista. Como otros han explicado, esta es una resaca de versiones anteriores de Windows y MS-DOS.
Si está contento de mirar con PowerShell, encontrar estos archivos es mucho más fácil. Tenga en cuenta que en PowerShell, "dir" es un alias para el cmdlet "Get-ChildItem".
Para buscar todos los archivos (no directorios / carpetas) que tienen una extensión (por ejemplo, "myfile.txt", pero no "FileWithNoExt"):
el modificador "-af" es la abreviatura de "-File" que restringe los objetos devueltos a archivos solamente. "-ad" solo obtendría directorios. Los "\." significa "un carácter de punto literal". Sin la barra invertida, el punto coincidiría con cualquier carácter, según la expresión regular estándar.
Para obtener todos los archivos donde había un punto en el nombre sin la extensión, así como una extensión (por ejemplo, "myDocument_v1.1.doc" pero no "myfile.txt"):
Sin embargo, tenga en cuenta que esto excluirá un archivo con el nombre como ".archive" con un punto anterior. Esto se debe a que no se trata de tener un nombre base y una extensión de "archivo". Si desea incluir estos:
Aquí, el patrón de coincidencia dice "Un punto literal, OR (|) BeginningOfString (^) seguido de EndOfString ($) (es decir, una cadena vacía)". Como un archivo no puede tener un nombre de base y una extensión vacíos , encontrará los archivos que comienzan con un punto.
fuente
ls *.*
es suficiente, como muchos otros han respondido antes que ustedSi escribe el comando anterior, entonces aquí: * (este es un comodín que significa cualquier secuencia de caracteres) seguido de un punto (.) Seguido de * esto podría interpretarse como mostrar todos los archivos que tienen un nombre como (cualquier secuencia de caracteres ). (cualquier secuencia de caracteres), lo que significa que muestra todos los archivos con cualquier extensión.
fuente
Program Files
incluido en la lista? No coincide con el patrón<sequence of characters>.<sequence of characters>
.