Windows CMD: o curinga “dir * .cpp” corresponde a “main.cpp_” e “main.cpp2” [duplicado]

1

Aqui está o conteúdo do diretório:

λ dir /b "..\src\"
main.c
main.c_
main.c2
main.cpp
main.cpp_
main.cpp2

Isso funciona como esperado:

λ dir /b "..\src\*.c"
main.c

Isso não acontece:

λ dir /b "..\src\*.cpp"
main.cpp
main.cpp_
main.cpp2

Por que esse caractere curinga corresponde a main.cpp _ e main.cpp2 ?

O que é uma solução funcional para listar apenas arquivos * .cpp em um diretório?

EDIT: não é uma duplicata de cmd tem bug curinga?

    
por raphaelh 10.09.2015 / 14:25

3 respostas

-2

Eu encontrei uma solução sem usar o powershell:

λ dir /b "..\src\" | findstr /r /c:".*\.cpp$"
    
por 10.09.2015 / 15:05
1

Embora seja um pouco estranho, funciona conforme especificado (marcação em itálico por mim):

You can use wildcard characters (* or?), to represent one or more characters of a file name and to display a subset of files or subdirectories.

Asterisk (*): Use the asterisk as a substitute for any string of characters, for example:

dir *.txt lists all files in the current directory with extensions that begin with .txt, such as .txt, .txt1, .txt_old.

dir read*.txt lists all files in the current directory that begin with "read" and with extensions that begin with .txt, such as .txt, .txt1, or .txt_old.

dir read*.* lists all files in the current directory that begin with "read" with any extension.

The asterisk wildcard always uses short file name mapping, so you might get unexpected results.

    
por 10.09.2015 / 14:33
1

Porque a extensão tem mais de 3 caracteres e você está usando um interpeter de comando que tem muito código de compatibilidade com versões anteriores para aplicativos de 16 bits. Se você executasse o mesmo comando no PowerShell, ele se comportaria como esperado.

Edite porque não consigo responder aos comentários

Sim, basta executar o powershell.exe e, em seguida, emitir o mesmo comando, menos o sinalizador / b.

Editar 2

Tanto quanto eu sei, não, não haveria uma solução a menos que você quisesse escrever seu próprio programa dir . E em relação ao PowerShell, seria uma boa idéia começar a se familiarizar com ele, pois tenho certeza de que a Microsoft está tentando eliminar o interpretador herdado do DOS.

    
por 10.09.2015 / 14:32