
Kurznamen in NTFS sind eine Kompatibilitätsfunktion für DOS-Systeme, die nur 8.3-Dateinamen unterstützen (<8-stelliger Name>.<3-stellige Erweiterung>). Wir können die Kurznamen von Dateien/Ordnern im aktuellen Verzeichnis mit abrufen dir /x
.
"C:\Programme" hat den Kurznamen "PROGRA~1". Wie muss ein Ordner heißen, damit er zu "PROGRA~1" wird und "C:\Programme" zu "PROGRA~2"?
Ich habe „Program Filas“, „Program Fil“ und „Program File“ ohne Erfolg ausprobiert. Ich habe auch versucht, die Erstellungs-, Änderungs- und letzten Schreibzeiten auf einen älteren Wert zu setzen mit:
$(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")
Antwort1
Dies wird nie der Fall sein, PROGRA~1
da Sie bereits ein anderes Verzeichnis mit diesem Namen haben.
Kurznamen sindhartnäckig– sie werden beim Erstellen des Objekts ausgewählt und wie normale Namen im Dateisystem gespeichert. Sobald der Name zugewiesen wurde, führen weder die alphabetische Reihenfolge noch die Änderungszeitstempel zu einer Änderung. (Schließlich sollen siearbeitenwie normale Namen, was bedeutet, dass sich der Name nicht plötzlich von selbst ändert.)
Die Win32-API hat eine FunktionSetFileShortName()Damit können Sie die 8.3 Namen aller Pfade direkt ändern. Schreiben Sie dazu ein kurzes Programm (oder verwenden Sie Python ctypes usw.), um diese Änderung vorzunehmen.
(Nachdem Sie den Kurznamen von „Programme“ in einen benutzerdefinierten Namen geändert haben, können Sie ein Verzeichnis mit diesem wörtlichen Namen erstellen, PROGRA~1
wenn das Programm dies benötigt. Sie müssen keinen speziellen Namen erfinden, um den Algorithmus auszutricksen.)
Alternativ können Sie „Programme“ in „asdf“ umbenennen, um den Kurznamen freizugeben. Sobald dann „PROGRA~1“ von Ihrem Verzeichnis beansprucht wird, benennen Sie das echte wieder in „Programme“ um und ihm wird ~2 zugewiesen.