
Nomes abreviados em NTFS são um recurso de compatibilidade para sistemas DOS que suportam apenas nomes de arquivo 8.3 (<nome de 8 caracteres>.<extensão de 3 caracteres>). Podemos obter os nomes abreviados de arquivos/pastas no diretório atual com dir /x
.
"C:\Arquivos de Programas" tem o nome abreviado "PROGRA~1". Qual deve ser o nome de uma pasta para que ela se torne "PROGRA~1" e "C:\Arquivos de Programas" se torne "PROGRA~2"?
Tentei "Programa Filas", "Programa Fil", "Arquivo de Programa" sem sucesso. Também tentei definir os tempos de criação, modificação e última gravação para algo mais antigo com:
$(Get-Item "Program Filas").creationtime=$(Get-Date "01/01/2000 00:01 am")
$(Get-Item "Program Filas").lastaccesstime=$(Get-Date "01/01/2000 00:01 am")
$(Get-Item "Program Filas").lastwritetime=$(Get-Date "01/01/2000 00:01 am")
Responder1
Isso nunca acontecerá PROGRA~1
enquanto você já tiver outro diretório com esse nome.
Nomes curtos sãopersistente– eles são escolhidos ao criar o objeto e armazenados no sistema de arquivos como nomes normais. Depois que o nome for atribuído, nem a ordem alfabética nem os carimbos de data e hora de modificação farão com que ele seja alterado. (Afinal, eles deveriamtrabalharcomo nomes normais, o que inclui não ter o nome alterado repentinamente por conta própria.)
A API Win32 tem uma funçãoSetFileShortName()que permite alterar diretamente os nomes 8.3 de qualquer caminho, então escreva um programa curto (ou use ctypes Python, etc.) para realizar essa alteração.
(Depois de alterar o nome abreviado de "Arquivos de Programas" para algo personalizado, você pode criar um diretório com nome literal, PROGRA~1
se for isso que o programa precisa. Você não precisa criar um nome especial para enganar o algoritmo.)
Alternativamente, você pode renomear “Arquivos de Programas” para “asdf”, liberando seu nome abreviado. Então, uma vez que "PROGRA~1" for reivindicado pelo seu diretório, renomeie o real de volta para "Arquivos de Programas" e ele será atribuído a ~2.