NTFS 中的短名称是 DOS 系统的兼容功能,它仅支持 8.3 文件名(<8 个字符的名称>.<3 个字符的扩展名>)。我们可以使用 来获取当前目录中文件/文件夹的短名称dir /x
。
“C:\Program Files” 的简称是“PROGRA~1”。文件夹应如何命名才能使其变为“PROGRA~1”,而“C:\Program Files”变为“PROGRA~2”?
我尝试了“Program Filas”、“Program Fil”、“Program File”,但无济于事。我还尝试将创建、修改、最后写入时间设置为更早的时间:
$(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")
答案1
PROGRA~1
只要您已经有另一个名为该目录的目录,它就永远不会变成这样。
简称执着的– 它们在创建对象时被选择,并像常规名称一样存储在文件系统中。一旦指定了名称,字母顺序和修改时间戳都不会导致其改变。(毕竟,它们应该工作与常规名称一样,包括名称不会突然自行改变。
Win32 API 有一个函数设置文件短名称()它允许您直接更改任何路径的 8.3 名称,因此编写一个简短的程序(或使用 Python ctypes 等)来执行此更改。
(将“Program Files”的简称更改为自定义名称后,PROGRA~1
如果程序需要,您可以创建一个以字面意思命名的目录。您不需要制作一个特殊的名称来欺骗算法。)
或者,您可以将“Program Files”重命名为“asdf”,释放其简称。然后,一旦“PROGRA~1”被您的目录认领,将真正的目录重命名为“Program Files”,它将被分配为~2。