Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

8.3形式の短いファイル名を生成しないようにする

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2009/08/14
対象OS
Windows 2000
Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
Windows 7
Windows Server 2008 R2
Windows OSのファイル・システムでは、長い名前のほかに、8.3形式の短い名前も同時に保持している。
短い名前の処理のために、わずかだがパフォーマンスが低下するし、予期しないファイル名のマッチが起こることがある。
設定を変更して、8.3形式の名前の作成を抑止できる。

解説

 現在のWindows OSのファイル・システムでは、最大255文字までの長いファイル名やフォルダ名をサポートしているが(大文字小文字の違いは無視される)、初期のWindowsやその前身となるMS-DOSでは、いわゆる「8.3形式」の短い名前しか利用できなかった。さすがにこれでは不便なため、その後長い名前も扱えるようにファイル・システムが拡張されたが、互換性のために、長い名前と同時に、内部的には短い名前も保持している。つまり1つのファイルに対して、長い名前と短い名前の両方が付けられている(ただし8.3以下に収まる場合は、両者は一致する)。

 2種類のファイル名を記録するため、若干ではあるが、パフォーマンスが低下するし、ディスク領域も多く必要になる。

 また短い名前は、長い名前をベースにして、例えば「long file name log.log」→「LONGFI~1.LOG」というふうに、元のファイル名の一部に数字などを付けて生成されている。そのため、数値などを使ってワイルドカード指定してファイルを検索すると、思わぬファイルがマッチすることがある。

C:\Document>dir *3.log
 ドライブ C のボリューム ラベルは WINDOWSXP です
 ボリューム シリアル番号は E4D9-9169 です

 C:\Document のディレクトリ

2009/08/07  09:44        3,752 serverlog-1309719411.log …3は?
2009/08/07  09:44        3,752 serverlog-1963413458.log …3は?
2009/08/07  09:44        3,752 serverlog-304997920.log …3は?
2009/08/07  09:44        3,752 serverlog-2527425745.log …3は?
2009/08/07  09:44        3,752 serverlog-1016914283.log
2009/08/07  09:44        3,752 serverlog-1017526203.log
2009/08/07  09:44        3,752 serverlog-1017918683.log
……(以下省略)……

 ここではファイル名の末尾が「3」であるファイルを検索するために、「dir *3.log」というコマンドを実行しているが、よく見ると「serverlog-1309719411.log」のように、末尾が「3」でないファイルも表示されている。その理由は、通常は表示されない短い名前の末尾に「3」が含まれているからである。短い名前がどうなっているかを確認するには、dirコマンドに「/x」オプションを付けて実行すればよい(TIPS「8.3形式の短いファイル名を表示させる」)。

C:\Document>dir *3.log /x
 ドライブ C のボリューム ラベルは WINDOWSXP です
 ボリューム シリアル番号は E4D9-9169 です

 C:\Document のディレクトリ

2009/08/07  09:44        3,752 SE1415~3.LOG serverlog-1309719411.log  …短い名前の末尾に3
2009/08/07  09:44        3,752 SE3891~3.LOG serverlog-1963413458.log
2009/08/07  09:44        3,752 SE3EBF~3.LOG serverlog-304997920.log
2009/08/07  09:44        3,752 SE769D~3.LOG serverlog-2527425745.log
2009/08/07  09:44        3,752 SEA8E9~1.LOG serverlog-1016914283.log …長い名前の末尾に3
2009/08/07  09:44        3,752 SEA84C~1.LOG serverlog-1017526203.log
2009/08/07  09:44        3,752 SEA071~1.LOG serverlog-1017918683.log
……(以下省略)……

 このような影響を避けるためには、8.3形式の短い名前の作成を抑止すればよい。このためには、TIPS「ファイルの最終アクセス日時の更新を無効にしてディスクへの書き込みを抑える」でも紹介したfsutil.exeコマンドを使って、システムの設定を変更すればよい。

操作方法

8.3形式のファイル名を作成するかどうかの確認

 8.3形式のファイル名の作成を抑止するには、「fsutil behavior」コマンドを利用する。まず現在の状態を把握するために、「fsutil behavior query disable8dot3」を実行する。

C:\WINDOWS\system32>fsutil behavior query /? …ヘルプの表示
使用法 : fsutil behavior set <オプション> <値>

<オプション>           <値>

disable8dot3           1 | 0 …このコマンドを実行する
allowextchar           1 | 0
disablelastaccess      1 | 0
quotanotify            1 秒から 4294967295 秒
mftzone                1 から 4

C:\WINDOWS\system32>fsutil behavior query disable8dot3 …状態の確認
disable8dot3 = 0 …デフォルトは0

C:\WINDOWS\system32>

 ここでは結果が0なので、「8.3形式のファイル名の作成の抑止」は無効(つまり作成する)になっている。

8.3形式のファイル名の作成を抑止する

 8.3形式のファイル名の作成を抑止するには、上記の変数の値を1にセットすればよい。

C:\WINDOWS\system32>fsutil behavior set disable8dot3 1 …8.3形式作成の抑止

C:\WINDOWS\system32>fsutil behavior query disable8dot3 …状態の確認
disable8dot3 = 1 …1にセットされた

C:\WINDOWS\system32>

 上記の設定後、システムを一度再起動する。すると以後は、8.3形式のファイル名は作成されなくなる。ただしすでに作成されているファイル名のエントリから、8.3形式の短い名前を消去することはできないし、この設定は全ボリュームで有効となる。

Windows 7/Windows Server 2008 R2での機能拡張

 Windows 7やWindows Server 2008 R2ではこの8.3形式の名前の抑止機能が拡張され、システム全体ではなく、ボリュームごとに設定できるようになった。また既存の8.3形式の名前を検証したり、削除したりできるようにもなっている。この機能拡張に伴い、「fsutil behavior set/query 〜」だけでなく、「fstuil 8dot3name 〜」というサブコマンドが追加されている。

C:\>fsutil 8dot3name /? …新しいコマンドのヘルプ
---- サポートされる 8DOT3NAME コマンド ----

query   システム上の短い名前の動作について現在の設定を照会
scan    影響を受けるレジストリ エントリを検出
set     システム上の短い名前の動作を制御する設定を変更
strip   ディレクトリ内のすべてのファイルの短い名前を削除

C:\>fsutil 8dot3name query /? …queryサブコマンドも拡張されている
使用法 : query [<ボリューム パス>]

ボリュームが指定されていない場合は、8dot3name のグローバルな状態が表示されます。
ボリュームが指定されている場合は、そのボリュームの 8dot3name の状態が表示され
ます。
……(中略)……
C:\>fsutil 8dot3name query …システム全体の設定の取得
NtfsDisable8dot3NameCreation のレジストリの状態は既定値の 2 です (ボリューム単位で設定します)。 …設定値はデフォルトの2(後述)

C:\>fsutil 8dot3name query c: …ボリュームごとの設定の確認
Disable8dot3 のボリュームの状態は 0 です (8dot3 名の作成は有効です)。
NtfsDisable8dot3NameCreation のレジストリの状態は既定値の 2 です (ボリューム単位で設定します)。
上の 2 つの設定に基づいて、8dot3 名の作成は c: で有効です。 …C:では8.3形式の名前の作成は有効

 8.3形式の名前の作成は、デフォルトでは、システム全体とボリュームの両方で有効になっている。システム全体で無効にしたり、ボリュームごとに無効にしたりするには、「fsutil 8dot3name set」コマンドを使う。

C:\>fsutil 8dot3name set …ヘルプの表示
使用法 : set [0 〜 3] | [<ボリューム パス> 1 | 0]

ボリュームのパスが指定されていない場合、レジストリ値が更新されます:

    0 - システムのすべてのボリュームで 8dot3 名の作成を有効にする
    1 - システムのすべてのボリュームで 8dot3 名の作成を無効にする
    2 - 8dot3 名の作成をボリューム単位で設定する …デフォルト値
    3 - システム ボリュームを除くすべてのボリュームで 8dot3 名の作成を
        無効にする
……(中略)……
C:\>fsutil 8dot3name set c: 1 …C:のみを無効にする
エラー:  短い名前の設定は、グローバル レジストリ設定により、このボリューム上で変更できない場合があります。 …エラーとなっているが、気にしなくてよい

 「fsutil 8dot3name set 0」が以前のWindows OSにおけるデフォルト値、「fsutil 8dot3name set 2」がWindows 7/Windows Server 2008 R2以降のOSにおけるデフォルト値となっている。ボリュームを指定すると、そのボリュームでのみ有効/無効になる。

Windows 7/Windows Server 2008 R2における8.3形式の名前の削除

 Windows 7やWindows Server 2008 R2では、すでにファイル・システム中に記録されている8.3形式の名前を削除することができる。このためにはまず「fsutil 8dot3name scan」コマンドで、レジストリ中に8.3形式の名前が含まれていないかどうかをチェックする。もし8.3形式の名前で参照しているレジストリ・エントリがあると、それに関連するサービスやプログラムの実行が失敗する可能性があるからだ。

C:\>fsutil 8dot3name scan /? …ヘルプの表示
使用法 : fsutil 8dot3name scan </s> </l ログ ファイル> </v> ディレクトリ パス

このコマンドは、指定されたディレクトリ パスをスキャンして、このパスから
短い名前が削除された場合に影響を受けるレジストリ キーを検索します。
……(中略)……
C:\>fsutil 8dot3name scan c: …スキャンの実行
レジストリをスキャンしています...

影響されるレジストリ キーの合計:                   0

8dot3 名をスキャンしています...

スキャンされたファイルとディレクトリの合計:           14
見つかった 8dot3 名の合計:                        5
削除された 8dot3 名の合計:                     0
……(以下省略)……

 これ以外にも、各アプリケーションに影響が出ないかどうかをあらかじめ十分検証しておく必要がある。

 問題がなさそうなら、「fsutil 8dot3name strip」コマンドで削除する。ただしその場合でも、まず/tオプション(テスト・モードの指定)を付けてテストしてから行うのが望ましい。End of Article

C:\>fsutil 8dot3name strip /? …ヘルプの表示
使用法 : fsutil 8dot3name strip </t> </s> </f> </l ログ ファイル>
                                </v> ディレクトリ パス

このコマンドを実行すると、ボリュームから 8dot3 ファイル名が完全に削除されます。
……(中略)……
C:\>fsutil 8dot3name strip c:
レジストリをスキャンしています...

影響されるレジストリ キーの合計:                   2

指定したパスにある 8dot3 名をレジストリ エントリが参照しているため、
操作に失敗しました。
……(以下省略)……

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間