Windows Latestは2026年10月19日(現地時間)、「Why Windows 11 still won't let you name a file CON, and Microsoft's explanation goes back to MS-DOS」において、Windows 11で「CON」や「PRN」などの名前をファイルやフォルダーに付けられない仕様について解説した。

この制限は1981年に登場したMS-DOS 1.0に起源があり、40年以上を経た現在も残っている。Windows LatestがWindows 11 26H2で試したところ、公式ドキュメントで指定された名前の多くは作成を拒否されたものの、拡張子を付けた一部の名前は作成でき、ドキュメントと実際の挙動に違いが見つかったという。

  • Windows 11で「CON」をファイル名にできない

    Windows 11で「CON」をファイル名にできない

なぜ「CON」や「PRN」をファイル名に使えないのか

Windowsでは、「CON」はコンソール、「PRN」はプリンタ、「AUX」は補助装置、「NUL」は出力を破棄するヌルデバイスを指す。また、「COM1」から「COM9」はシリアルポート、「LPT1」から「LPT9」はパラレルポートに対応する。

これらはOSが特定の機器や機能を識別するために使用する名前で、「予約語」と呼ばれる。そのため、通常のファイルやフォルダーの名前として使用することはできない。

Microsoftの公式ドキュメントでは、拡張子を付けた「NUL.txt」や「NUL.tar.gz」も予約語として扱うと説明している。また、上付き数字の「¹」「²」「³」も数字として認識されるため、COM¹やLPT³も予約語に含まれる。

制限の起源は1981年のMS-DOS 1.0

Windows Latestによると、この仕様は1970年代に生まれたOS「CP/M」が起源とされる。MS-DOSは「CP/M」との互換性を重視して設計されており、CP/Mのデバイスを指定する方式がほぼそのまま採用され、Windowsにも引き継がれた形だ。

CP/Mでは「CON:」のようにデバイス名の後ろにコロンを付ける仕様だったが、MS-DOS 1.0はこれを省略可能とした。この変更は後に、一部の技術者から重大な欠陥と評されている。CONという文字列だけでは、コンソールを指すのか、ファイルを指すのか判別しにくくなったためだ。

1983年のMS-DOS 2.0でディレクトリが導入されると、デバイス名をどのディレクトリでも使える仕様にする必要が生じた。その結果、どのディレクトリからでもデバイス名として認識される仕組みが維持され、現在のWindowsでもPRNなどをファイル名に使えない理由になっている。

Microsoftが古い仕様を廃止できない理由

Microsoftの技術者Raymond Chen氏のブログ記事「What's the deal with those reserved filenames like NUL and CON? - The Old New Thing」によると、Microsoftが仕様を維持している背景には既存のプログラムやスクリプトへの影響がある。

同氏は、予約語に依存する既存のプログラムやスクリプトが現在も存在するため、仕様を維持する必要があると説明している。例えば、従来のバッチファイルでは、NULを利用してディレクトリの存在を確認する手法が使われてきたという。

このほか、予約語の扱いを変更すると、NULへの出力(破棄)を想定していた処理がファイルへの書き込みに変わるなど、従来のスクリプトが意図しない動作をする可能性がある。1970年代に生まれた技術で半世紀が経過しているが、現在も一部で必要とされている。

Windows 11では「CON.txt」を作成できるケースも

Windows LatestがWindows 11 26H2で検証したところ、「CON」「PRN」「AUX」「NUL」「COM1」などの名前は「指定されたデバイス名は無効です」というエラーで拒否された。一方、拡張子を付けた「NUL.txt」や「CON.txt」は作成できたという。これは、拡張子付きの名前も予約語として扱うとするMicrosoftの公式ドキュメントとは異なる結果だ。

ただし、ファイルを作成できても正常に利用できるとは限らない。Microsoft Q&Aでは、「NUL.txt」をPowerShellで一覧表示できても、期待どおりに動作しなかった事例が報告されている。Windows 11でも予約語に関する制約が残っており、こうした名前の使用には注意が必要だ。