最大255文字の「長いファイル名 (long filename; LFN)」がサポートされるようになった Windows 95 以降のWindowsでは、おのおののファイルに対し、8.3形式の「短いファイル名 (short filename; SFN)」が自動的に生成される。
短いファイル名は次のような方法で生成される[1]:
- 短いファイル名で使えない文字を除去ないし置換する
- 必要に応じ、拡張子以外のファイル名は6文字以下に切り詰め、「~」と数字(1〜9)を付加する。
- この処理は、ファイル名が長すぎる場合のほか、使えない文字の除去、拡張子の切り詰めなど、長いファイル名から変化する処理が行われた場合には実行される。ただし、小文字から大文字への置換のみの場合はこの処理は実行されない。
- 切り詰めにより重複が発生した場合、「~」のあとの数字が増加する。
- 重複が多い場合の詳細な挙動は環境依存である。NT系では、5つめからは「~」の前が変化する。
- 拡張子は3文字以下に切り詰める。
- 小文字は大文字に置換する。
たとえば、長いファイル名「123456789.txt」に対して、短いファイル名は、多くの場合「123456~1.TXT」となる(この短いファイル名が使用済みだった場合は「123456~2.TXT」となる)。
短いファイル名は、長いファイル名に対し一定のものではなく、各ディレクトリ内で重複がないように生成される。だから、ディレクトリが異なれば、同じ長いファイル名に対し異なる短いファイル名が生成されることや、異なる長いファイル名に対し同じ短いファイル名が生成されることもある。
短いファイル名は、長いファイル名と同様に使用できる。つまり、長いファイル名でファイルにアクセスするのと、短いファイル名でアクセスするのとは、同じ挙動となる。これは、長いファイル名に未対応のアプリケーションを使う場合に役に立つ。
ただし、短いファイル名は一定ではないので、短いファイル名でのアクセスは環境依存になりうる。たとえば、「Program Files」フォルダの代わりに「PROGRA~1」フォルダにアクセスするテクニックがあるが、「Program Files」の短いファイル名は「PROGRA~1」ではないかもしれない。
FATファイルシステムのドライブには、8.3ファイル名のために11バイトの領域がディレクトリエントリ内に確保されている。
ファイル名の長さが8.3に満たない場合、左詰めにして、余った領域にはスペース (0x20) が詰められる。ただし、拡張子には必ず末尾3バイトを使用し、必要ならば拡張子の前にスペースが詰められる。たとえば、「1234.TX」は「1234␣␣␣␣TX␣」と記録される(「␣」はスペース)。
拡張子の前のドットはディスク上には記録されず、第8バイトと第9バイトの間にソフト的にドットが挿入される。ただし、カレントディレクトリを表す「.」と親ディレクトリを表す「..」の扱いはそれとは異なり、そのままディスク上に記録されている。
日本語環境では、文字コードはCP932である。ただし、ファイル名が0xE5で始まるエントリは「削除済みファイル」を表すので、CP932でのファイル名が0xE5で始まる場合、0x05で置換される。