
Infelizmente, preciso trabalhar com cmd.exe de vez em quando e isso geralmente não me incomoda muito, exceto quando estou editando um arquivo no vim e tento executar esse arquivo com o preenchimento de tabulação.
Se eu tiver o arquivo foo.py
aberto no vim, .foo.py.swp
ele também existe no diretório. O comportamento que vejo é:
C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py
Isso é bastante irritante e estou me perguntando se existe alguma maneira de evitar esse comportamento sem uma solução alternativa completa, como alterar o nome do arquivo de troca ou usar o PowerShell. Percebi que o PowerShell não emula esse comportamento, mas realmente não quero usá-lo.
Responder1
O Windows está se comportando exatamente como você esperaria se você pensasse bem (e para ser honesto, até ver sua pergunta, eu não tinha pensado completamente). Um nome de arquivo que começa com '.' é visto como um arquivo com um nome de arquivo nulo e uma extensão. Para ver como isso funciona, crie um diretório e, em seguida, crie os seguintes arquivos usando touch
(presumo que você esteja familiarizado com touch
):
touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb
Agora, nesse diretório, use a tabtecla para percorrer os arquivos e você verá que a sequência é:
.a.aaa
.b.bbb
a.aaa
b.bbb
Se você quiser passar pelos arquivos 'a', digite 'a' antes de tabe você obterá um previsível .a.aaa
, a.aaa
.
Quanto ao _caractere no nome de um arquivo, ele é como qualquer outro caractere e é classificado após 'Z'.
Responder2
A semântica de FindFirstFile (que o CMD usa para enumerar arquivos correspondentes) significa que o padrão é testado em relação ao nome de arquivo longo (o que você gostaria de ver), bem como em relação ao nome de arquivo "8.3" gerado automaticamente. A geração de nomes abreviados é o que está causando suas correspondências espúrias.
Você pode desabilitar a geração 8.3 via FSUTIL, mas isso interrompe a geração ADICIONAL e não remove nomes já existentes. Você teria que executar um script que renomeasse para removê-los completamente.
No entanto, isso é perigoso, pois alguns programas não têm noção e anotam os nomes abreviados gerados automaticamente (digamos que você esteja usando um instalador de 16 bits, como versões antigas do MSOFFICE). Se você desabilitar sua geração, esses instaladores poderão falhar.