Windows verwendet noch immer ~
zum Kürzen von Dateien und Verzeichnissen mit langen Namen. Sie können den „kurzen“ Namen sehen, indem Sie ihn dir /X
in die Eingabeaufforderung eingeben.
Meine Frage ist, wie die Ziffern den kurzen Dateinamen zugewiesen werden. Es scheint weder alphabetisch zu sein, noch funktioniert es anscheinend nach dem Zeitpunkt der Dateierstellung.
Zum Beispiel:
Ich erstelle eine neue Textdatei:C:\reallylongfilenameB.txt
Dann führe ich es aus dir /X
und sehe, dass der Kurzname von Datei B lautet:REALLY~1.TXT
Ich erstelle eine zweite Textdatei:C:\reallylongfilenameA.txt
Dann führe ich es aus dir /X
und sehe, dass der Kurzname von DateiA lautet:REALLY~2.TXT
Dann stelle ich die Uhr einen Tag zurück, lösche sie C:\reallylongfilenameA.txt
und erstelle sie erneut, sodass das Erstellungsdatum im Wesentlichen C:\reallylongfilenameA.txt
einen Tag vorher liegt C:\reallylongfilenameB.txt
.
Ich laufe dir /X
und C:\reallylongfilenameA.txt
der Kurzname ist immer noch REALLY~2.TXT
.
Gibt es angesichts dieses Beispiels eine Möglichkeit, den Kurznamen „ C:\reallylongfilenameA.txt
be“ zu erstellen REALLY~1.TXT
?
Antwort1
So wie ich es verstehe, weist NTFS bei der Erstellung automatisch persistente 8.3-Dateinamen zu. Wenn Sie „dir /X“ ausführen, werden die Dateinamen nicht im laufenden Betrieb gekürzt, sondern die vorab zugewiesenen Kurznamen werden nachgeschlagen.
Antwort2
Wie Jack in seiner Antwort betonte, wird der Kurzname zugewiesen, wenn die Datei erstellt (oder umbenannt oder verschoben) wird. Der Wert hängt sowohl vom langen Dateinamen als auch davon ab, welche anderen Kurznamen bereits vorhanden sind.
Der genaue Algorithmus zur Zuweisung von Kurznamen ist nicht dokumentiert und es gibt keine Garantie dafür, dass der Algorithmus zwischen Windows-Versionen oder sogar zwischen verschiedenen Speichersystemformaten konstant bleibt. Sie sollten keinen Code schreiben, der von einem bestimmten Algorithmus zur Zuweisung von Kurznamen abhängig ist.
Kurze Dateinamen führen sowohl zu Designeinschränkungen als auch zu Fehlern. Ein Beispiel für eine Designeinschränkung ist, dass del *.txt
eine Datei mit dem Namen gelöscht werden kann, something.txt2
weil die Erweiterung des Kurznamens wahrscheinlich lautet .txt
und Quellmasken sowohl lange als auch kurze Namen berücksichtigen. Weitere Informationen finden Sie im Abschnitt mit dem Titel„BUG – Kurze 8.3-Dateinamen können die Optionen /D und /S beschädigen“beiWas sind die nicht dokumentierten Funktionen und Einschränkungen des Windows-Befehls FINDSTR?für ein Beispiel eines Fehlers, der durch Kurznamen entsteht.
Bei NTFS-Volumes können kurze Dateinamen deaktiviert werden (kurze Namen, die vor der Deaktivierung vorhanden waren, bleiben erhalten). Viele Benutzer (Organisationen) deaktivieren Kurznamen auf ihrem System, weil sie Probleme verursachen können.
Aktualisieren
Hier ist ein definitives Argument dafür, warum es Zeitverschwendung ist, den Algorithmus zur Generierung kurzer Dateinamen zu entwickeln -Mit FSUTIL können Sie für eine Datei einen beliebigen Kurznamen angeben, sofern die Datei in diesem Ordner noch nicht vorhanden ist.
Hier ist die entsprechende FSUTIL-Hilfedokumentation
C:\test>fsutil file
---- FILE Commands Supported ----
findbysid Find a file by security identifier
queryallocranges Query the allocated ranges for a file
setshortname Set the short name for a file
setvaliddata Set the valid data length for a file
setzerodata Set the zero data for a file
createnew Creates a new file of a specified size
queryfileid Queries the file ID of the specified file
queryfilenamebyid Displays a random link name for the file ID
C:\test>fsutil file setshortname /?
Usage : fsutil file setshortname <filename> <shortname>
Eg : fsutil file setshortname C:\testfile.txt testfile