AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1644682
Accepted
fgrieu
fgrieu
Asked: 2021-04-27 06:37:13 +0800 CST2021-04-27 06:37:13 +0800 CST 2021-04-27 06:37:13 +0800 CST

Em cmd.exe, como "del *.tmp" pode ser impedido de excluir arquivos *.tmpl?

  • 772

No Windows 10 cmd.exe, o comando del *.tmppode excluir silenciosamente arquivos como project.tmpl.

Existe alguma opção, solução alternativa, entrada de registro ou sacrifício ritual para evitar isso?

Para os incrédulos: na minha máquina, na qual a unidade C: foi formatada por um instalador do Windows 10 em 2020:

Demonstração

(onde a mensagem de erro em francês significa arquivo não encontrado ).

cmd.exe
  • 4 4 respostas
  • 4328 Views

4 respostas

  • Voted
  1. Best Answer
    phuclv
    2021-04-27T07:34:19+08:002021-04-27T07:34:19+08:00

    Um arquivo pode ter nomes curtos do DOS 8.3 e todos os comandos internos da era do DOS também funcionam com nomes longos e curtos por motivos de compatibilidade 1 , de modo que um arquivo com extensão longa pode ser acidentalmente correspondido. Há muitas perguntas semelhantes:

    • A consulta de linha de comando do DOS retorna muitos resultados
    • cmd.exe: "del *.txt" também remove *.txt1 etc
    • DEL *1.* exclui todos os arquivos da pasta
    • Curingas do Windows com arquivos com extensões de mais de 3 caracteres

    Seria melhor usar o PowerShell porque os nomes curtos não são mais correspondentes. dirin cmd deve corresponder aos nomes curtos para não interromper os programas herdados. O PowerShell não tem essa limitação. Basta executar Remove-Item *.tmpou qualquer um de seus aliases como rm *.tmp,del *.tmp

    No cmd você terá que filtrar findstrassim

    for /F "delims=" %f in ('dir /B ^| findstr /I /E ".tmp"') do @del "%f"
    

    (Substituir %fpor %%fem um arquivo de lote)

    Existem também muitas outras soluções, como forfiles(já que não é um comando interno do cmd) que você pode encontrar em Como posso obter os comandos "dir" e "copy" para operar em "*.xyz", mas não em "*.xyz~ "?


    No entanto, será ainda melhor desabilitar a geração de nomes 8.3 e remover todos os nomes curtos. Na verdade, como os volumes recém-formatados do Windows 8 e do Windows Server 2012 terão a geração de nome 8.3 desabilitada por padrão por motivos de desempenho. Isso também ajudará a evitar situações como esta: WinXP dir command: extensões de 3 e 4 caracteres são iguais?

    Na verdade, as versões recentes do Windows Server nem mesmo habilitam a nomenclatura 8.3 quando você formata novos volumes de dados.

    https://docs.microsoft.com/en-us/archive/blogs/josebda/windows-server-2012-file-server-tip-disable-8-3-naming-and-strip-those-short-names- também

    Se sua unidade ainda tiver a geração de nome 8.3 habilitada, execute o seguinte comando para desativá-la na unidade C:

    fsutil 8dot3name set C: 1
    

    ou execute fsutil 8dot3name set 1para desativá-lo em todos os volumes

    A configuração também pode ser definida no registro. A chave correspondente é HKLM\System\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation. O valor para o fsutile a chave do registro é assim

    • 0: Habilita a criação de nomes 8dot3 para todos os volumes no sistema.
    • 1: Desativa a criação de nomes 8dot3 para todos os volumes no sistema.
    • 2: Define a criação de nomes 8dot3 por volume.
    • 3: Desativa a criação de nomes 8dot3 para todos os volumes, exceto o volume do sistema.

    Se os nomes estiverem lá, eles também podem ser removidos comfsutil 8dot3name strip

    Observe que fsutildeve ser executado com privilégios de administrador


    1 Comandos antigos listam seus arquivos usando a FindFirstFileAPI antiga que corresponde a nomes longos e curtos. Consulte Por que FindFirstFileencontra nomes curtos? . O novo código deve usar FindFirstFileExem vez disso para evitar isso

    • 36
  2. Gilles 'SO- stop being evil'
    2021-04-28T05:00:52+08:002021-04-28T05:00:52+08:00

    O motivo disso acontecer é que o Windows manteve a compatibilidade com nomes de arquivo do MS-DOS , onde os nomes de arquivo eram limitados a uma extensão de 3 caracteres. Para facilitar a transição, o Windows 95 introduziu um modo de compatibilidade onde cada arquivo possui um alias “8.3”, também conhecido como “nome abreviado” do arquivo: além de project.tmpl, o mesmo arquivo também pode ser acessado como PROJEC~1.TMP. Você pode ver esses nomes curtos nas listagens de diretórios com dir /x. O padrão curinga *.tmpcorresponde a esse nome alternativo (os nomes de arquivo não diferenciam maiúsculas de minúsculas). A Microsoft documenta isso paradir ; também se aplica a outros comandos, incluindo del.

    Posso reproduzir o comportamento que você observou em minha máquina corporativa com Windows 10 (não atualizada de um Windows 10 anterior). Tenho privilégios de administrador local, mas não administrador de domínio, e não tenho permissão para executar fsutil 8dot3name query c:( Error: Access is denied.).

    Se você controlar a parte do sistema que está produzindo os arquivos temporários, uma solução robusta é dar a eles uma extensão que não tenha 3 (ou 0) caracteres. *.tmou *.tempnão corresponderia a 8.3 aliases de nomes de arquivos com uma extensão diferente. Como alternativa, coloque esses arquivos temporários em um diretório separado e remova o diretório inteiro quando quiser excluí-los.

    • 9
  3. Solomon Rutzky
    2021-04-28T09:23:43+08:002021-04-28T09:23:43+08:00

    Além da solução baseada em CMD fornecida na resposta do phuclv , você pode usar o comando FORFILES not-well-known-but-very-cool :

    FORFILES /M *.tmp /C "CMD /C ECHO @path && DEL @path"
    

    O parâmetro "search mask" ( /M) não corresponde aos nomes 8.3, portanto .tmp e .tmpl são duas extensões diferentes sem qualquer filtragem adicional. A máscara de pesquisa também não diferencia maiúsculas de minúsculas.

    Por exemplo:

    C:\TEMP>echo a > del_test_1.tmp
    
    C:\TEMP>echo a > del_test_2.TMP
    
    C:\TEMP>echo a > del_test_3.tmpl
    
    C:\TEMP>dir *.tmp
     Volume in drive C is Windows
     Volume Serial Number is B0F0-812B
    
     Directory of C:\TEMP
    
    04/28/2021  11:46 AM                 4 del_test_1.tmp
    04/28/2021  11:48 AM                 4 del_test_2.TMP
    04/28/2021  11:48 AM                 4 del_test_3.tmpl
                   3 File(s)             12 bytes
                   0 Dir(s)  179,312,234,496 bytes free
    
    C:\TEMP>FORFILES /M *.tmp /C "CMD /C ECHO @path && DEL @path"
    
    "C:\TEMP\del_test_1.tmp"
    "C:\TEMP\del_test_2.TMP"
    
    C:\TEMP>dir *.tmp
     Volume in drive C is Windows
     Volume Serial Number is B0F0-812B
    
     Directory of C:\TEMP
    
    04/28/2021  11:48 AM                 4 del_test_3.tmpl
                   1 File(s)              4 bytes
                   0 Dir(s)  179,310,305,280 bytes free
    
    • 8
  4. Io-oI
    2021-04-27T07:21:33+08:002021-04-27T07:21:33+08:00

    Você precisa de um for looppara evitar que algum terceiro arquivo com caracteres adicionais após " .tmp" seja excluído também ...

    for /t tokens^=* %i in ('where .:*.tmp')do echo\ del "%~i"

    O comando where retornará apenas arquivos .endcom .tmp(somente)...

    Você também pode tentar /Recursivo:

    for /t tokens^=* %i in ('where/r "D:\MyProject\Folder" *.tmp')do echo\ del "%~i"

    • Não sei explicar o motivo desse evento que aconteceu com você, mas acontece comigo também...

    • Agora eu sei ... @phuclv explicou em sua resposta ... plz, considere sua resposta

    > reg query "HKLM\System\CurrentControlSet\Control\FileSystem" /v "NtfsDisable8dot3NameCreation"
    
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem
        NtfsDisable8dot3NameCreation    REG_DWORD    0x0

    insira a descrição da imagem aqui

    insira a descrição da imagem aqui


    • Usando For /fwith wherepara manter arquivos*.tmp*

    insira a descrição da imagem aqui

    • Também não sei explicar porque esse evento não acontece com @spikey_richie...
    • 4

relate perguntas

  • O CMD do Windows redefiniu a variável PATH para o padrão

  • O Windows não reinicia, não consegue acessar o Gerenciador de tarefas ou iniciar determinados programas

  • Como criar um script que ouça as alterações de conteúdo e toque nas pastas pai até o fim?

  • Qual é o comando para redefinir uma instalação do Windows sem excluir nenhum arquivo

  • O Windows 2016 não executa o arquivo .bat

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve