ファイル名に「?」や「;」などの特殊文字を使用できないのはなぜですか?


17

ファイルを保存しようとすると、Windowsで名前に特殊文字(コロン、疑問符、感嘆符など)を使用すると、ファイル名が無効であるというメッセージが表示されます。

何故ですか?



どのプログラムでファイルを保存しようとしており、ファイル内の問題の文字またはファイル名にあるように見えますか?
ユッカK.コルペラ


回答:


22

Windows(およびほとんどの文字が最初に由来したDOS)にとって特別な意味を持つ文字がいくつかあります

MSDNから:

ファイル名に次の文字を含めることはできません:
\ /:*?"<> |

/スイッチ(およびディレクトリ区切り記号)です。
\ディレクトリ区切り文字です。
:ドライブ指定子です。
*および?は、検索で使用されるワイルドカードです。
"パラメータにスペースを許可する方法です。
<そして>、プログラムの入力と出力がスクリーン/キーボード以外のものから出入りできるようにするリダイレクトです。
|1つのプログラムからの出力を次のプログラムへの入力として使用できるようにするパイプです。


1
この答えを明確にするために、これらの特殊文字がファイル名に含まれている場合、コマンドライン(またはパス)の解析を妨げる可能性があります。ファイル名を何らかの方法で区切る必要はありません(たとえば、引用符またはスペースで囲む)。そのような特殊文字に遭遇すると、不正な解析が発生します(つまり、ファイル名の特殊文字部分または演算子ですか?)。
おがくず

1
ただし、長いファイル名と引用符が処理されるため、これらの制限の一部は不要になったと言えます。\ ? *そして"、他の文字は引用符の外にのみ有用であるため、現在の構文で、本当に必要なものだけです。例外は次のとおりです。これは2番目の文字としてのみ有用であり、他の場所では許可しても違法になる可能性があります。言い換えれば、ファイルが名前のないA:A letter's story.txt、しかし名前のファイルに問題ありませんSarah: My favorite cat.txt
trlkly

<>"予約済みのワイルドカード文字です。Windowsは*?.、ネイティブNTに変換するときにDOSの複雑なセマンティクスを実装するためにそれらを使用します*?.。6つのワイルドカード文字が予約されているのは、Windowsがファイルシステム自体に、つまりNtQueryDirectoryFileシステムコールに直接エスケープメカニズムなしでワイルドカードマッチングを実装しているためです。Unixでは、ワイルドカードはアプリケーションレベルで、通常はエスケープをサポートするシェルによって実装されます。
エリックサン

:通常はファイル名ではなく、ファイルパスに予約されています。デバイス名とファイルストリームの区切り文字として使用されます(例: "filename:streamname:streamtype")。また、このようにVirtualBoxなどの一部のファイルシステムは、共有フォルダのファイルシステムは、許可:|およびファイル名にASCII制御文字(1-31)、それらは名前付きパイプファイルシステム以外のMicrosoftのファイルシステムのすべてで予約しています。
エリックサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.