Jak zauważył Jack w swojej odpowiedzi, krótka nazwa jest przypisywana podczas tworzenia pliku (lub zmiany nazwy lub przeniesienia). Wartość zależy zarówno od długiej nazwy pliku, jak i od tego, jakie inne nazwy już istnieją.
Dokładny algorytm przypisywania krótkich nazw jest nieudokumentowany i nie ma gwarancji, że algorytm pozostanie stały między wersjami systemu Windows lub nawet między różnymi formatami systemu pamięci masowej. Nie należy pisać kodu zależnego od konkretnego algorytmu przypisywania krótkich nazw.
Istnieją zarówno ograniczenia projektowe, jak i błędy wynikające z krótkich nazw plików. Przykładem ograniczenia projektowego jest del *.txt może usunąć nazwany plik something.txt2 ponieważ rozszerzenie krótkiej nazwy prawdopodobnie będzie .txt, a maski źródłowe sprawdzają zarówno długie, jak i krótkie nazwy. Zobacz sekcję zatytułowaną „BŁĄD - Krótkie nazwy plików 8.3 mogą przerwać opcje / D i / S
„ w Jakie są nieudokumentowane funkcje i ograniczenia polecenia FINDSTR systemu Windows? na przykład błędu wynikającego z krótkich nazw.
Woluminy NTFS mogą mieć wyłączone krótkie nazwy plików (pozostaną krótkie nazwy, które istniały przed ich wyłączeniem). Wiele osób (organizacji) wyłącza krótkie nazwy w swoim systemie z powodu problemów, które mogą powodować.
Aktualizacja
Oto definitywny argument, dlaczego marnowanie czasu na ustalanie algorytmu generowania krótkich nazw plików jest stratą czasu FSUTIL pozwala określić dowolną krótką nazwę pliku, o ile nie istnieje ona już w tym folderze.
Oto odpowiednia dokumentacja pomocy FSUTIL
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
C:\temppotem ruszaj sięreallylongfilenameA.txtwrócić doC:\przedreallylongfilenameB.txt; pliki będąREALLY~1.TXTi plik B będzieREALLY~2.TXT