Windowsのシステム管理や古いアプリケーションの運用において、ファイル名の「8.3形式」が必要になる場面は少なくありません。
現代のWindows環境では長いファイル名(LFN)が一般的ですが、内部的には互換性のために短いファイル名が保持されています。
特にパスの長さに制限があるシステムや、スペースを含むディレクトリ名を正しく処理できない古いプログラムを扱う際に、この短い形式のパスが役立ちます。
この記事では、コマンドプロンプトを使用して、特定のファイルやフォルダの8.3形式を効率的に取得する方法について詳しく解説します。
8.3形式(短いファイル名)の基本概念
8.3形式とは、MS-DOS時代から受け継がれている「ファイル名が最大8文字、拡張子が最大3文字」という命名規則のことです。
Windows 95以降、長いファイル名がサポートされるようになりましたが、システムは依然として短い名前を生成する機能を備えています。
この形式では、名前が8文字を超える場合、最初の数文字に「~1」などの番号を付与することでユニークな名前を作成します。
また、スペースが含まれるフォルダ名も、スペースを排除した短い名前に変換されます。
これにより、スペースを認識できないレガシーなコマンドラインツールでも、ファイルにアクセスすることが可能になります。
現在のWindows環境においても、パスの全長が260文字を超える「MAX_PATH」制限の回避策として利用されることがあります。
DIRコマンドを使用して8.3形式を取得する
最も簡単で一般的な方法は、DIRコマンドのオプションを活用することです。
DIRコマンドには、短いファイル名を表示するための専用スイッチが用意されています。
具体的には、/Xオプションを指定してコマンドを実行します。
@echo off
rem カレントディレクトリのファイル一覧を8.3形式を含めて表示します
dir /x
このコマンドを実行すると、通常のファイル名の左側に、生成された8.3形式の名前が表示されます。
2026/05/20 10:00 <DIR> PROGRA~1 Program Files
2026/05/20 10:00 <DIR> PROGRA~2 Program Files (x86)
2026/05/20 10:15 128 TESTFI~1.TXT TestFileName_Long_Version.txt
「PROGRA~1」のように、チルダを含む名前が8.3形式の名前です。
もし、長いファイル名が元から8文字以内であり、かつスペースを含まない場合は、8.3形式は生成されず空白として表示されます。
FORコマンドで特定のファイルの短いパスを取得する
バッチファイルの中で特定のファイルの8.3形式を変数として取得したい場合は、FORコマンドが便利です。
FORコマンドの変数修飾子を用いることで、ファイル名を直接短い形式に変換できます。
具体的には、%~sIという構文を使用します(Iは変数名)。
以下は、カレントディレクトリ内のすべてのテキストファイルに対して、その短いパスを表示するコードです。
@echo off
rem 指定したファイルの8.3形式パスを表示するバッチ
for %%f in ("Long File Name Test.txt") do (
echo 短いファイル名: %%~sf
)
このスクリプトを実行すると、スペースを含む長い名前が自動的に短縮されます。
短いファイル名: LONGFI~1.TXT
この方法は、自動化スクリプトの中でファイルパスを他のコマンドに渡す際に非常に有効です。
%~s修飾子は、ファイルが存在する場合にのみ機能する点に注意してください。
FSUTILコマンドによる8.3形式生成の状態確認
環境によっては、パフォーマンス向上のために8.3形式の生成が無効化されている場合があります。
もしDIRコマンドで短い名前が表示されない場合は、システムの設定を確認する必要があります。
これを確認するには、管理者権限のコマンドプロンプトでfsutilコマンドを使用します。
@echo off
rem ボリュームごとの8.3形式生成設定を確認します
fsutil 8dot3name query C:
実行結果により、現在のドライブで短い名前の生成が許可されているかが判明します。
レジストリの状態は 2 です (ボリュームごとの設定に基づき、8dot3 名を作成します)。
ボリューム C: では 8dot3 名の作成が有効になっています。
設定が「1(無効)」になっている場合、いくらコマンドを打っても短い名前は取得できません。
サーバーOSなどの特定の環境では、ファイルアクセスの高速化のために意図的に無効化されていることが一般的です。
バッチファイルでフルパスの短い名前を抽出する実用例
プログラム開発やシステム移行の際、深い階層にあるディレクトリの短いパスが必要になることがあります。
以下のコードは、引数として与えたファイルやフォルダのフルパスを、すべて短い形式に変換して出力するものです。
@echo off
if "%~1"=="" (
echo ファイルまたはフォルダをドラッグ&ドロップしてください。
pause
exit /b
)
echo 元のパス: %1
echo 短いパス: %~s1
pause
このスクリプトをshortpath.batとして保存し、対象のファイルをその上にドロップするだけで結果が得られます。
複雑なコマンドを覚えなくても、日常的に8.3形式を確認できる便利なツールとして活用できます。
短いファイル名が生成されない場合の対処法
前述のFSUTILで有効になっていても、ファイルが作成された後に設定が変更された場合、既存のファイルには短い名前が付与されていないことがあります。
そのような場合、対象のファイルを一度別のフォルダにコピーし、元の場所に戻すことで解決することがあります。
コピー操作の際、OSが改めて8.3形式の生成を試みるためです。
ただし、システムドライブなどの重要なディレクトリでこの操作を行う際は、バックアップを必ず取ってください。
また、NTFS以外のファイルシステムや、ネットワーク越しにアクセスしている共有フォルダでは、相手側の設定に依存します。
ネットワークドライブ(NASなど)では、8.3形式が意図的に無効にされているケースが多いことを覚えておきましょう。
よくある質問と注意点
8.3形式の名前は、一度決まるとそのファイルが削除されるまで変わりません。
しかし、同じ名前のファイルが複数ある場合、生成される番号(~1, ~2など)は作成順序によって変動します。
そのため、特定のファイルが常に「ABCDEF~1.TXT」になるとは限らないという点に注意してください。
スクリプト内でハードコーディング(直書き)するのは避け、必ず実行時に取得するように設計するのがベストプラクティスです。
また、最近のWindows PowerShellを使用している場合は、以下のように取得することも可能です。
# PowerShellで短いパスを取得する例
(New-Object -ComObject Scripting.FileSystemObject).GetFile("C:\Target\LongFileName.txt").ShortPath
コマンドプロンプト(cmd.exe)の標準機能だけで完結させたい場合は、前述したFOR文の修飾子を用いるのが最も軽量で確実な方法です。
まとめ
コマンドプロンプトでファイル名の8.3形式を取得する方法について解説しました。
単純な確認だけであればdir /xコマンドを使用するのが最も効率的です。
バッチファイルなどの処理の中で活用したい場合は、FOR文の%~sI修飾子を利用して動的にパスを変換するのが推奨されます。
もし短い名前が表示されない場合は、fsutilコマンドでドライブの設定を確認してください。
8.3形式は古い技術に思われがちですが、パスの長さ制限の回避や古い業務システムのメンテナンスにおいて、現在でも非常に重要な役割を果たしています。
これらのコマンドをマスターしておくことで、トラブルシューティングや自動化の幅が大きく広がるはずです。
