Wie werden die Ziffern nach ~ in kurzen Windows-Dateinamen vergeben?

Wie werden die Ziffern nach ~ in kurzen Windows-Dateinamen vergeben?

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 /Xin 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 /Xund 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 /Xund sehe, dass der Kurzname von DateiA lautet:REALLY~2.TXT

Dann stelle ich die Uhr einen Tag zurück, lösche sie C:\reallylongfilenameA.txtund erstelle sie erneut, sodass das Erstellungsdatum im Wesentlichen C:\reallylongfilenameA.txteinen Tag vorher liegt C:\reallylongfilenameB.txt.

Ich laufe dir /Xund C:\reallylongfilenameA.txtder Kurzname ist immer noch REALLY~2.TXT.

Gibt es angesichts dieses Beispiels eine Möglichkeit, den Kurznamen „ C:\reallylongfilenameA.txtbe“ 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.

Quelle:http://en.wikipedia.org/wiki/8.3_Dateiname

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 *.txteine Datei mit dem Namen gelöscht werden kann, something.txt2weil die Erweiterung des Kurznamens wahrscheinlich lautet .txtund 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

verwandte Informationen