cmd.exe: “del * .txt” também remove * .txt1 etc [duplicado]

8

Possível duplicado:
comando dir do WinXP: 3 e 4 extensões de caracteres são iguais?

Fiquei irritado com um comportamento estranho do cmd.exe por um longo tempo (pelo menos WinXP e Windows7). Um comando como del *.txttambém removerá *.txt1arquivos (qualquer número de caracteres depois de '.txt' fará). Isso é um bug bem conhecido ou o quê?

Comunidade
fonte

Respostas:

8

É um ocasionalmente encontrado algo conhecido?

Uma explicação do comportamento está aqui , completa com uma possível solução alternativa.

Resumo: Ele vem da maneira como o NTFS lida com nomes de arquivos curtos (8.3), para compatibilidade com coisas mais antigas que não podem lidar com nomes longos de arquivos "novos e com muitos fãs". dir /xpode ser usado para visualizar o nome do arquivo curto, da seguinte maneira:

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
 ...

Extensões com mais de três caracteres serão simplesmente truncadas para o nome de arquivo curto; por isso .txt1, .txtxtxtxt, .txt_file, etc, todos se tornam .txt.

Jim Davis
fonte
6

Arquivos com mais de 4 letras na extensão (e outras regras também se aplicam), recebem um nome abreviado, por exemplo "foo.txt1" tem o nome abreviado "foo ~ 1.txt". DEL(como DIRe possivelmente a maioria dos outros cmd.execomandos internos) também operará com nomes curtos. Para uma discussão sobre um tópico relacionado, consulte aqui: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx

Christian.K
fonte
+1 para um link mais autoritário que o meu.
21711 Jim Jim
2

Isso seria em um sistema de arquivos FAT / VFAT? Nesse caso, você está sendo mordido pelo hackery usado para representar nomes que não se encaixam no esquema 8.3; existe uma DIRopção que mostra os nomes abreviados mutilados, que começam com o nome do arquivo real, mas têm um ~e um número antes da extensão, e a extensão é limitada a 3 caracteres. (Exemplo: C:\Program Filesgeralmente traduz para C:\PROGRA~1.) Um curinga pode corresponder inesperadamente a esses nomes. Isso não deve acontecer em NTFS ou (eu acho) em compartilhamentos de rede. exceto que o DOS ainda não morreu, parece ...

geekosaur
fonte
2

Você provavelmente pode usar o Forfilescomando para uma solução alternativa

Por exemplo.

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

Corresponde apenas aos txtfinais.

phuclv
fonte