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

8

Eu tenho sido incomodado por um comportamento estranho de cmd.exe por um longo tempo (pelo menos WinXP e Windows7). Um comando como del *.txt também removerá *.txt1 arquivos (qualquer número de caracteres depois de '.txt' será suficiente). Isso é um bug bem conhecido ou o que?

    
por Community 04.07.2011 / 07:13

4 respostas

8

É ocasionalmente encontrado um pouco conhecido?

Uma explicação do comportamento está aqui , completa com um possível trabalho em volta.

Resumo: Ele vem da maneira como o NTFS lida com nomes de arquivos curtos (8.3), para compatibilidade com coisas antigas que não conseguem lidar com nomes longos de arquivos "novos". dir /x pode ser usado para visualizar o nome do arquivo curto, assim:

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 seu nome de arquivo curto; então .txt1 , .txtxtxtxt , .txt_file , etc, todos se tornarão .txt .

    
por 04.07.2011 / 07:31
6

Arquivos com mais de 4 letras na extensão (e outras regras também se aplicam), obtenha um nome abreviado, por exemplo, "foo.txt1" tem o nome "foo ~ 1.txt". DEL (como DIR e possivelmente a maioria dos outros comandos cmd.exe builtin) também funcionará em nomes abreviados. Para uma discussão sobre um tópico relacionado, consulte aqui: link

    
por 04.07.2011 / 07:34
2

Isso seria em um sistema de arquivos FAT / VFAT? Se assim for, você está sendo mordido pelo hackery usado para representar nomes que não se encaixam no esquema 8.3; há uma opção DIR que mostra os nomes abreviados, que começarão com o nome real do arquivo, mas terão um ~ e um número antes da extensão e, em seguida, a extensão será limitada a 3 caracteres. (Exemplo: C:\Program Files geralmente se traduz em C:\PROGRA~1 .) Um caractere curinga pode corresponder inesperadamente a esses nomes. Isso deve não acontecer em NTFS ou (eu acho) em compartilhamentos de rede. exceto que o DOS ainda não morreu, parece ....

    
por 04.07.2011 / 07:32
2

Você provavelmente pode usar o comando Forfiles para obter uma solução alternativa

Por exemplo.

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

Corresponde apenas txt finais.

    
por 04.07.2011 / 07:36