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-DOS8文字+拡張子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.txtMYLONG~1.TXT
特殊文字File[1].txtFILE1~1.TXT
先頭ピリオド.gitignoreGITIGN~1
複数ピリオドfile.name.backup.txtFILENA~1.TXT
拡張子4文字以上document.htmlDOCUME~1.HTM
8.3に収まるFILE.TXTFILE.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の機能。

関連トピック