Windowsで「PROGRA~1」というファイル名が出るのはなんで?

当ページのリンクには広告が含まれています。
コマンドプロンプトのPROGRA~1がProgram Filesと同じフォルダーを指す8.3形式の短縮名であることを示す図

正体はMS-DOSとの互換性のために作られた8.3形式の短い別名!

8.3形式の短縮名

Windowsではファイルやフォルダーを作るとき、長い名前とは別にMS-DOS互換の短い名前が作られることがあります。これが8.3形式の短いファイル名(SFN)です。基本形はベース名が最大8文字、拡張子が最大3文字です。

PROGRA~1はショートカットやコピーではなく、短縮名が存在する環境で「Program Files」と同じフォルダーを指す別名です。


「別名」と聞いてショートカットやシンボリックリンクとの違いが気になった方はWindowsでの扱われ方をこちらで比較できます。

MS-DOSやWindows 3.1向けの古いソフトの中には8.3形式の名前しか扱えないものがありました。Windowsは長いファイル名に対応したあとも、こうしたソフトとの互換性を保つために短縮名を併用できる仕組みを残しました。現在のWindowsでもこの仕組みは残っていますが、ファイルシステムや設定によっては短縮名が作成されません。

なぜ「Program Files」が「PROGRA~1」になるのか

Windowsでよく見られる短縮名はおおむね次の流れで作られます。重複状況やファイルシステムの実装によって結果が変わるため常にこの形になるとは限りません

  • 名前からスペースや8.3形式で使えない文字を取り除く、または置き換える
  • 残ったベース名の先頭6文字を使用し、大文字にする
  • 末尾に~と数字を付ける
  • 拡張子がある場合は先頭3文字までを使用する

「Program Files」ならスペースを除いて「ProgramFiles」となり、先頭6文字の「PROGRA」に~1を付けて「PROGRA~1」です。いくつか例を並べてみます。

元の名前短縮名の例
Program FilesPROGRA~1
Program Files (x86)PROGRA~2
TextFile.Mine.txtTEXTFI~1.TXT
ver +1.2.textVER_12~1.TEX

「Program Files (x86)」が「PROGRA~2」になっているのは、先頭6文字を取ると「Program Files」と同じ「PROGRA」になってしまうからです。同じ短縮名は共存できないので、後から作られたほうに連番が振られます。どちらが1番でどちらが2番になるかはフォルダの作成順に左右されるため、環境によっては番号が入れ替わることもあるようです。

この生成方法は代表例です。似た名前が増えるとハッシュを含む形式になる場合があり、設定によっては短縮名自体が作成されません。パスとして使う場合は名前を推測せず、dir /xで実際の短縮名を確認してください。


Windowsのファイル名に使えない文字や予約語もDOS時代からのルールと関係しています。あわせて仕組みを確認したい方はこちらもどうぞ。

余談ですが、かつてマイクロソフトの分割騒動が話題になったときに分割後にできるかもしれない2社を「MICROS~1」「MICROS~2」と呼ぶジョークが海外のエンジニアの間で流行ったこともあるそうです。:)

自分の環境でも見てみる

実際に自分のPCで確認したい場合はコマンドプロンプトで見られます。

cmd
dir C:\ /x

/xオプションを付けると通常の名前と一緒に短縮名が表示されます。短縮名がある場合は長い名前の左側へ PROGRA~1のような名前が追加されます。

実行結果
2026/09/03 (木)  08:14    <DIR>          PROGRA~1     Program Files
2026/04/28 (火)  02:36    <DIR>          PROGRA~2     Program Files (x86)
2024/12/04 (水)  03:51    <DIR>                       Users
2026/09/02 (水)  22:04    <DIR>                       Windows

Windows 10・11にも仕組みは残っているが生成の有無は設定次第

Windows 10・11にも8.3形式の仕組みは残っていますが、新しいファイルやフォルダーに短縮名が作られるかどうかはシステム全体とボリュームごとの設定によって変わります。設定を確認する場合は管理者として開いたコマンドプロンプトで次のコマンドを実行します。

cmd – システム全体
fsutil 8dot3name query
レジストリの状態は 2 です (ボリューム単位で設定します - 既定値)
cmd – Cドライブ
fsutil 8dot3name query c:
ボリュームの状態は 0 です (8dot3 名の作成は有効です)
レジストリの状態は 2 です (ボリューム単位で設定します - 既定値)

以上の設定に基づいて、8dot3 名の作成は "c:" で有効です

1つ目ではシステム全体の既定動作、2つ目ではCドライブの状態を確認できます。筆者の環境ではシステムドライブは有効、後から追加した別ドライブは無効でした。設定値の「2」はボリュームごとに制御するという意味であり、それだけで「システムドライブだけ有効」と決まるわけではありません。別ドライブの状態はドライブ文字を変えて個別に確認する必要があります。

8.3形式の短縮名はファイル名の照合にかかる負荷を減らす目的で生成を無効にできます。この新しい短縮名の生成を止めることは、すでに存在する短縮名を削除することは別の操作です。既存の短縮名を削除すると古いアプリが起動できなくなったりアンインストールできなくなったりする可能性があります。普段使いのPCでは古い仕組みだからという理由だけでむやみに設定を変更しないほうが安全です。


身近なIT用語の「なんで?」をもっと知りたい方はIT雑学・ぷちQAまとめからテーマ別に探せます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!