Windows 8.3形式(Short File Name)
作成日:
Windows filesystem NTFS DOS
概要
8.3形式(8.3 filename / Short File Name)は、MS-DOS時代のファイル命名規則。Windowsは長いファイル名を自動的にこの形式に変換し、古いプログラムとの互換性を維持している。
8.3形式の構造
FILENAME.EXT
├──────┘ └─┘
│ │
│ └── 拡張子: 最大3文字
└────────── ファイル名: 最大8文字
歴史的背景
| 時期 | OS | ファイル名制限 |
|---|---|---|
| 1981年〜 | MS-DOS | 8文字+拡張子3文字 |
| 1995年〜 | Windows 95 | 長いファイル名(LFN)サポート開始 |
| 現在 | Windows 10/11 | 最大255文字(8.3形式も併存) |
Windows 95以降で長いファイル名がサポートされたが、古いプログラムとの互換性のために8.3形式も自動生成される。
自動生成のルール
基本ルール(~1 〜 ~4)
同じプレフィックス6文字を持つファイルが 4つまで の場合:
LongFileName1.txt → LONGFI~1.TXT
LongFileName2.txt → LONGFI~2.TXT
LongFileName3.txt → LONGFI~3.TXT
LongFileName4.txt → LONGFI~4.TXT
5つ目以降(ハッシュベース)
5つ目以降はアルゴリズムが変わる:
LongFileName5.txt → LO2A3B~1.TXT ← ハッシュ値が入る
LongFileName6.txt → LO8C4D~1.TXT
| 部分 | 説明 |
|---|---|
| 最初の2文字 | 元のファイル名の先頭2文字 |
| 次の4文字 | ファイル名から計算された16進ハッシュ |
~1 | 連番 |
特殊ケース
| ケース | 元のファイル名 | 生成結果 |
|---|---|---|
| スペースあり | My Long File.txt | MYLONG~1.TXT |
| 特殊文字 | File[1].txt | FILE1~1.TXT |
| 先頭ピリオド | .gitignore | GITIGN~1 |
| 複数ピリオド | file.name.backup.txt | FILENA~1.TXT |
| 拡張子4文字以上 | document.html | DOCUME~1.HTM |
| 8.3に収まる | FILE.TXT | FILE.TXT(変換なし) |
マッピングの確認方法
方法1: dir /x コマンド(推奨)
dir /x "C:\Program Files"
出力例:
2024/01/15 10:30 <DIR> COMMON~1 Common Files
2024/01/15 10:30 <DIR> INTERN~1 Internet Explorer
2024/01/15 10:30 <DIR> MICROS~1 Microsoft Office
左側が8.3形式、右側が長いファイル名。
方法2: PowerShell
# 特定のファイル/フォルダの短い名前を取得
cmd /c "for %A in (""C:\Program Files"") do @echo %~sA"
方法3: fsutil コマンド
fsutil file queryfileid "C:\Program Files"
動作確認テスト
以下のコマンドで8.3形式の生成を確認できる:
mkdir C:\test8dot3
cd C:\test8dot3
echo. > "LongFileName01.txt"
echo. > "LongFileName02.txt"
echo. > "LongFileName03.txt"
echo. > "LongFileName04.txt"
echo. > "LongFileName05.txt"
echo. > "LongFileName06.txt"
dir /x
出力例:
LONGFI~1.TXT LongFileName01.txt
LONGFI~2.TXT LongFileName02.txt
LONGFI~3.TXT LongFileName03.txt
LONGFI~4.TXT LongFileName04.txt
LOB2F4~1.TXT LongFileName05.txt ← ハッシュベース
LO4E91~1.TXT LongFileName06.txt ← ハッシュベース
8.3形式の有効/無効設定
NTFSボリュームでは、8.3形式の生成を無効にすることも可能。
現在の設定確認
fsutil 8dot3name query C:
出力例:
C: ボリュームの 8dot3 名前の作成の状態は 0 (有効) です。
設定変更(管理者権限が必要)
# 無効化
fsutil 8dot3name set C: 1
# 有効化
fsutil 8dot3name set C: 0
なぜ今でも使われるのか
| 理由 | 説明 |
|---|---|
| レガシー互換 | 古いプログラムやバッチファイルが依存 |
| パス長制限の回避 | 260文字制限を超える場合の回避策 |
| スペース回避 | 引用符なしでパスを記述できる |
パスの等価性
以下は同じ場所を指す:
cd "C:\Program Files\Microsoft Office"
cd C:\PROGRA~1\MICROS~1
後者はスペースがないため、古いスクリプトでも問題なく動作する。
macOS/Linuxとの比較
| 項目 | Windows (NTFS) | macOS (APFS/HFS+) | Linux (ext4) |
|---|---|---|---|
| 8.3形式の自動生成 | あり | なし | なし |
| ファイル名の長さ | 最大255文字 | 最大255バイト | 最大255バイト |
| 理由 | DOS互換のため | Unix系でDOS互換不要 | Unix系でDOS互換不要 |
macOS/LinuxはUnix系OSであり、MS-DOSとの互換性を必要としないため、8.3形式の仕組みは存在しない。
注意点
FAT/FAT32フォーマット
USBドライブなどでFAT/FAT32を使用する場合、8.3形式の制限がより厳しく適用される場合がある。
Windowsとの共有
macOS/LinuxからSamba(SMB)でWindowsと共有する場合、Windows側で8.3形式が生成される。これはWindows側のNTFSの機能。
関連トピック
- Windowsパスにおける「~」の意味 - チルダの意味の概要