This is for exFAT, FAT32, & NTFS formatted disks/volumes. ReFS (used with Storage Spaces) does not support Short File Names (SFNs) at all and you cannot boot from a ReFS volume. Long File Names on NTFS etc are limited to 255 characters, on ReFS they can be up to 32768 characters. On NTFS etc but not ReFS the maximum length of a path name is 256 characters, which includes all parent directories and the filename. A 255 character mixed case long filename is possible only for files, or folders with no sub-folders, in the root folder of any drive eg c:\ and not c:\d\
.
Long File Names (LFNs) are the standard now with 8.3 Short File Names (SFNs) only retained for legacy support, ie LFN are the “real” filenames and 8.3 SFNs are alternate. SFN generation can be turned off but if you use legacy program/s this can make the program/s unusable. Rarely but possible, depending how the programs are written 16, 32 & 64 bit programs can also be affected by not having SFNs available. SFNs are generated using the kernel32.dll function GetShortPathName.
WARNING WILL SMITH WARNING>>>>I DO NOT TURN OFF SFN & I SUGGEST YOU DO NOT EITHER UNLESS YOU ARE ABSOLUTELY SURE YOU DON’T NEED THEM<<<
In all the examples I have used fsutil.exe but the .exe can be omitted
To check if any registry entries would be affected by turning off SFN creation run the following command from either an elevated (Admin) Command Prompt (CMD) or an elevated (Admin) PowerShell. The log file/s (the log file name can be anything you like) will show you how many SFNs there are and what registry entries are affected.:
fsutil.exe 8dot3name scan /l c:\my8dot3.log /s c:
If you have more than one volume eg d: drive then after running the first one change the c: to the next drive letter and change the log file name and so on until all volumes have been checked. I just chose to add d to the log file name to make it easy for me to identify the drive. So as an example for d: drive you would use :
fsutil.exe 8dot3name scan /l c:\my8dot3d.log /s d:
The following values will tell you the current state and changing the value to one of these will alter the system SFN generation state to that value’s setting:
0 - Enable 8dot3 name creation on all volumes on the system
1 - Disable 8dot3 name creation on all volumes on the system
2 - Set 8dot3 name creation on a per volume basis
3 - Disable 8dot3 name creation on all volumes except the system volume
To check the system state of SFN generation
fsutil.exe 8dot3name query
To check a volume’s SFN state
Fsutil.exe 8dot3name query c: (where c: is the volume you want to check)
To turn SFN generation off or on you use the fsutil from an admin Command or Powershell prompt:
To turn 8.3 SFN off
fsutil.exe behavior set disable8dot3 1
or
fsutil.exe 8dot3name set 1
To turn 8.3 SFN on (normal default is on)
fsutil.exe behavior set disable8dot3 0 (that’s a zero)
or
fsutil.exe 8dot3name set 0
You can also check and change the registry key to adjust the system SFN generation state
Using a registry editor eg regedit go to the following key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
Look for the entry NtfsDisable8dot3NameCreation
If the value is 2 that means when turning SFN creation on or off you need to specify the volume either by using c: (where c: is the volume you want to check or change) or by using Volume followed by the GUID of the volume you want to check or change eg Volume{928842df-5a01-11de-a85c-806e6f6e6963}. As an example using that example GUID to set the Volume to stop using SFN generation you would use:
fsutil.exe behavior set Volume{928842df-5a01-11de-a85c-806e6f6e6963} 1
or
fsutil.exe 8dot3name set Volume{928842df-5a01-11de-a85c-806e6f6e6963} 1
As an example of using C: (the c can be either upper or lower case)
fsutil.exe behavior set C: 1
Remember this is only meaningful if the registry value is 2