Quando eu corro dir *.*
, produz resultados inesperados. Mesmo arquivos e pastas sem qualquer ponto em seus nomes são listados. Por exemplo
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
Por que é que? Existe alguma maneira de listar apenas arquivos com um ponto?
.
como se tivessem um.
no final para muitos propósitos, incluindo este..
caractere têm um.
caractere implícito no final. - Você pode ter uma pasta chamada "Blah.old" por exemplo, e então ela teria uma extensão de arquivo de 3 letras tradicional; para uso do dia a dia "Blah
" é o mesmo que "Blah.
" se é um arquivo ou uma pasta..
e os rótulos nos nomes DNS são separados por.
(assim, o nome da zona DNS raiz é um único rótulo de comprimento zero). Um filho da zona DNS raiz.
écom.
e um filho decom.
issuperuser.com.
e assim por diante.Respostas:
Estou escrevendo esta resposta porque OP enfatizou que:
O
DIR
comando vem de uma hora em que:Portanto, por esse padrão,
*.*
significava qualquer nome e qualquer extensão . Não significa uma string contendo um ".", Que pode ou não ter caracteres antes ou depois do "." .A política da Microsoft está preservando a compatibilidade com versões anteriores. Portanto, essa interpretação de
*.*
é retida.Mas no Windows PowerShell,
*.*
significa uma string contendo um ".", Que pode ou não ter caracteres antes ou depois do "." .fonte
Folder.
" e uma pasta chamada "Folder
" são nomeadas da mesma forma, no que diz respeito às janelas.AA.BB
com <8 na primeira parte e <3 na extensão? Será que apenas preenchia com espaços?Por que é que?
Pode-se encontrar uma resposta para " Por que isso? " No artigo Wildcards :
Implicação . O último {dot} em um nome de arquivo / pasta separa o nome base e a extensão. assim
dir *.
exibe todos os itens sem extensão edir *.*
exibe todos os itens com extensão de zero ou mais caracteres .Estritamente falando,
dir *.
exibe todos os itens sem período (.
) no nome . (BTW, Naming Files, Paths e Namespaces MSDN artigo diz explicitamente que " é aceitável especificar um período como o primeiro caractere de um nome ".)Existe alguma maneira de listar apenas arquivos com um ponto?
Acho que não. No entanto, há uma solução alternativa com uma expressão regular apropriada.
PowerShell (solução de escopo total, se usada em um console Powershell):
Cmd (apenas uma ideia, pode exigir alguma elaboração):
Adendo: um bônus e explicação
Um palpite intuitivo que
Name
é concatenadoBaseName
eExtension
não é válido . O script a seguir prova sua utilizaçãocmd
e osPowerShell
principais recursos, e o regex estranho^..*\...*$
é derivado de seus resultados.Saída :
Compare a definição de
BaseName
propriedade, diferente para arquivos e pastas:Minha resposta original foi baseada em mal-entendidos imperdoáveis:
Leiadir /?
, usedir /A:-D
:Outra abordagem: aplicarfindstr
regex comodir *.* | findstr /V "<.*>"
fonte
*.*
combina todos os arquivos , como indicado na pergunta.
como.dbus-keyrings
,.VirtualBox
e.vscode
.dir /A:-D
lista apenas arquivos que são felizes?dir /A:-D
está incorreto. 1 / lista os arquivos sem extensão. 2 / ele não lista os diretórios que têm um.
em seu nome (perfeitamente legal)Você pode corresponder nomes de arquivos com um ponto usando o caractere curinga não documentado
<
, que corresponde a uma sequência de 0 ou mais caracteres no nome da base ou a uma sequência de 0 ou mais caracteres na extensão:Lembre-se de que
<
também é um meta-caractere, portanto, é necessário citar ou escapar sempre que for usado em um padrão a partir do shell de comando.fonte
O interpretador de linha de comando verá " . " Como "todos os nomes de arquivo base" com "todas as extensões". Uma extensão em branco ainda é uma extensão , portanto, será correspondida e retornada com a lista. Como outros explicaram, esta é uma ressaca de versões anteriores do Windows e do MS-DOS.
Se você está feliz em procurar usando o PowerShell, encontrar esses arquivos é muito mais fácil. Observe que, no PowerShell, "dir" é um alias para o cmdlet "Get-ChildItem".
Para encontrar todos os arquivos (não diretórios / pastas) que possuam uma extensão (por exemplo, "meuarquivo.txt", mas não "arquivoWithNoExt"):
a opção "-af" é uma abreviação de "-File", que restringe os objetos de retorno apenas aos arquivos. "-ad" só obteria diretórios. O "\." significa "um caractere de ponto literal". Sem a barra invertida, o ponto corresponderia a qualquer caractere, como por regex padrão.
Para obter todos os arquivos onde havia um ponto no nome sem a extensão, bem como uma extensão (por exemplo, "myDocument_v1.1.doc" mas não "myfile.txt"):
No entanto, observe que isso excluirá um arquivo com o nome, como ".archive", com um ponto precedente. Isso ocorre porque é tratado como não tendo nenhum nome de base e uma extensão de "archive". Se você quiser incluir estes:
Aqui, o padrão de correspondência diz "Um ponto literal, OR (|) BeginningOfString (^) seguido por EndOfString ($) (isto é, uma string vazia)". Como um arquivo não pode ter um nome de base e uma extensão vazios , ele encontrará os arquivos que começam com um ponto.
fonte
ls *.*
é suficiente, como muitos outros já responderam antes de vocêSe você digitar o comando acima, então aqui: * (este é um curinga que significa qualquer sequência de caracteres) seguido por um ponto (.) Seguido por * isso pode ser interpretado como mostrar todos os arquivos que possuem nome como (qualquer sequência de caracteres ) (qualquer seqüência de caracteres) que significa ainda que mostra todos os arquivos com qualquer extensão.
fonte
Program Files
incluído na lista? Não corresponde ao padrão<sequence of characters>.<sequence of characters>
.