[サイトTop] [As/R Top] [ヘルプTop] [戻る]

小難しい理屈

ファイル名に使わない方が良い文字

 ファイルを管理する上で、使わない方が良い文字について語ります。
 ファイラーというよりも、Windows一般の教養ネタです。

 で、¥とか/とか|とか*とか?とか:とか>とか<とか”とか、使っちゃいけない文字は、どうせ使えないんだからバッサリ割愛します。
 例外的に、こういう文字を使うと、こんな時に困るよと言うのを紹介したいと思います。

「,」カンマ、「;」セミコロン

 カンマやセミコロンを用いたファイル名にリネームしようとすると、Windowsのメッセージ内で使えない文字に含まれているバージョンがあります。(例:Windows7などではShell32.dllのリソース文字列に記載されている)

 これは、FAT時代の使えない文字が「.」「"」「/」「\」「[」「]」「:」「;」「|」「=」「,」であったため、非推奨で残ったのだと思われます。
 なんだか、半端に混ざってて気持ち悪いですが、FDDとか手元にないので確認できません。
 そういったメディアに持っていけないかもしれません。

※追記
 Windows7は一部修正されたようで、エクスプローラーのように別のエラーメッセージが表示されるようになったものがあります。


末尾や先頭に「.」ドット(ピリオド)

 末尾に「.」は本来はMS-DOSの制限だったのですが、今でも制限が有効であり、使えません。
 (使用できる環境からコピーしてくると、文字化けしたり、誤認したり、勝手にファイル名を変えられたりします)
 逆に先頭に「.」があるファイルは、UNIX系では隠しファイルとして特別な意味があるファイルとなっています。
 ただこれ結構、末尾だろうが先頭だろうが「拡張子」という文化と相容れないので、色んなところで誤認識が多いんですよね。
 なるべく必要な時以外は使わない方がお奨めです。
 また本件の派生ですが、相対パス指定で使う「.」ピリオド1個は現在のディレクトリ、「..」ピリオド2個の場合は親ディレクトリを指しますので、これもファイル名としては使えません。

 あと、ついでに悪用事例です。
 これ、どんなファイルだと思います?

 おそらく「なんだろう?」って人は思うわけで「テキストのアイコンだから大丈夫だろ」と考えてしまって・・・で、ダブルクリックしちゃってウィルス感染というのがありがちなパターンです。

 このファイルの正体はメモ帳のアイコン画像をコピーして作成した「.exe」という実行ファイルです。
 Windowsのフォルダ設定で「登録されている拡張子は表示しない」、これがONになってると何が何だか正体がわからないファイルが表示されることになります。
 エクスプローラーの初期の設定値がそのようになっており、悪用してくださいと言わんばかりの状態なので十分ご注意ください。

 ちなみに、最近のエクスプローラーでは先頭が「.」になるようなリネームは、エラーになるように仕様変更されています。
 このようなファイルやディレクトリが必要な場合は、リネームする際に末尾に「.」を付与してください。
例)「.bmp」(ドット、ビーエムピー)を作る場合は「.bmp.」(ドット、ビーエムピー、ドット)と入力します。
 なお、As/Rでも埋め込み型のリネームも同様にエラーになりますので、末尾にドットを付与するか、こんな余計なお世話制限のない拡張リネームなどの機能を使用してください。

 先頭「.」(ドット)が2個以上あるとエラーにならないので、セキュリティを考えて・・・というのはありえませんし、UNIX系のファイルを操作する場合ってめんどくさい事になったものです。
 .htaccessとか普通に作るでしょうに・・・まさかファイラーを使えなんて話はありえませんし・・・。


予約されている単語

 特定のハードウェアなどを示すので、使用できません。
 「CON, PRN, AUX, NUL, CLOCK$, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9」
 さらに言っちゃうと、これらに拡張子を付与してもダメです。
 モノによっては作成できる奴も混在していますが、削除に複雑な手順が必要だったりするので避けた方が賢明です。
 一応、それぞれの意味をざっと書いておきます。
 CON=コンソール(キーボードだったりディスプレイだったり)
 PRN=プリンタ、AUX=RS-232Cポート、NUL=なし, CLOCK$=時計、COMn=シリアルポート(nはポート番号)、LPTn=パラレルポート(nはポート番号)
 ※大抵の場合、AUXはCOM1と同じ意味になります。


「-」ハイフン

 いわゆるマイナス記号です。
 最近はあまり聞かなくなりましたが、デスクトップ検索などの制御文字として使われることもあることから、検索でファイルが見つけられない系のトラブルがあります。
 もちろん「+」も結構微妙です。
※今ではあまり使われなくなっていますが、ISO9660という規格のCD-ROMフォーマットでは「-」ハイフンは使用することができない文字です。
※Unix系では、コマンドラインオプションのスイッチを示す文字がハイフンであるため使用を避ける習慣がありますが、Windows系ではハイフンだったりスラッシュだったりするので関連性は希薄です。
※URLとして使用される場合は、Googleの公式ガイドでは「アンダースコアよりハイフンを推奨」と記載がありますが、実状は大差ありません。


「:」コロン

 え?ちょっと待って、コロンって使えない文字じゃないの?と思われるかもしれません。
 通常だと、ドライブ文字の次に来る特殊な文字ですしね。
 ですが、そもそもAドライブとかCドライブとか、ドライブレターという考え方を持たないOSもあったりします。
 また、他の使い方だと、ファイルの副ストリームへのアクセスする際に使われます。
※軽く説明
 副ストリームとは、通常のファイルの裏に書き込めるエリアでNTFSで使える機能です。
 ちなみにエクスプローラーから参照する方法はありませんので、わりと良く悪用されてます。

 でまぁ、Unix系(Androidなどが身近な例)だと副ストリームもドライブレターもありませんので、普通にファイル名の文字として使えます。(Macではパス区切り文字がコロンであった時代があり、特殊な例外になってます)
 つまり、スマホで書き物して、ファイル名をつけて保存って時にやらかしました。(作者)
 PC使っていて何が困るかってぇと、NASなどのネットワークドライブや、ファイルサーバーなどで良く利用されるSambaなどで出くわすことがあります。
 その辺りも考えて作られているファイル管理ソフトであっても、ファイル名がショートファイル名のような省略形で表示されるため、見分けが付かなくなるというわけです。
 ※sambaでは 「"」「*」「/」「:」「<」「>」「?」「\」「|」が許されています。


「 」半角スペース

 パス指定で区切り位置を調整するので「”」で括らなきゃいけなくなります。
 可能であれば「_」アンダーバーなどに置き換えることを推奨します。
 「Documents and Settings」とか「Program Files」とか、Windows95から半角スペースも使えるよ!ってアピールしたかっただけとちゃうんか?という気がしてなりません。
 ただ全角スペースなら良いか?と言われれば微妙でして、見えない文字というのは、トラブル防止という観点からすると避けた方が良いと思います。

※見えない文字の恐怖の補足
 ファイル名の先頭への空白、ファイル名の末尾に空白なども結構トラブルの元です。
 (先頭への空白は、エクスプローラーやファイラーによっては禁止されているものが多々ありますが、末尾はかなり無警戒です)
 例えば
「test.txt(スペース100個).exe」
 というファイルを作ってみてください。
 エクスプローラーで見ると、拡張子表示をONにしていても
「test.txt              ...」
 このように、末尾が省略されてテキストなのか実行ファイルなのか判別できず、exeファイルのアイコン画像をそれらしいものにしておけば簡単に騙されてしまうでしょう。
 エクスプローラーをはじめとする、拡張子分離機能を持たないファイラーを使ってる人を引っ掛けるための簡単な騙しの手口の一つなんで、ご注意ください。


UNICODE文字、機種依存文字

 いわゆる①や半角のカナなど、PCメールなどで送らないほうが良い文字などが該当します。
 通常のPCでのやり取りは問題ないのですが、他のOSへ持っていった時、例えばスマートフォンとかもですね。
 問題を起こすことが多々あります。
 あと、UNICODE文字の中には文字を読む方向を変えるという、画面に表示されないモノ(制御文字と言います)などもありますので、使わないにこしたことはありません。
 文字方向を変える制御文字などは悪用される場合も多々ありますしね。

※文字の方向を変える特殊文字による悪用事例
 「テスト[RLO]txt.exe」
 というファイルがあったとします。
 エクスプローラーでは
 「テストexe.txt」
 と、表示されます。
 この[RLO]というのは、文字の方向を右→左に変えろという方向を変える文字で、テキストフィールドの右クリックメニューから簡単に挿入できるため、全然珍しいものじゃありません。

 実行可能なexeファイルなのに、あたかも拡張子がtxtファイルであるように見えます。
 さらに、exeファイルのアイコンの画像をメモ帳と同じにしておけば、エクスプローラーで見たときに実行ファイルなのかテキストファイルなのか、まず判断が付かないでしょう。
 こうやって、ウィルスとかマルウェアとかに感染させようとするケースが多々あります。
 宣伝っぽくて嫌な感じがしますが、古くからAs/Rはこういうファイルを色分けして気付かせる機能を持ってます。


「~」チルダ

 MS-DOSよりも前の負の遺産でもあるのですが(うろ覚えですがMicrosoft Disk BASICのFAT12ごろ)、Windowsには8.3形式のショートファイル名という形式と、Windows95から使えるようになった3万2千ちょいの文字まで扱えるロングファイル名という2つの表記形式があります。
 (通常、フルパスで250文字くらいまでしか使えませんので、後述のオマケを参照してください)
 例えばこの二つのファイル名って同じものを意味します。
hogehogehoge.txt
hogeho~1.txt
 つまり、「~」ってショートファイル名を意味する文字であり、意図せず重複ファイル名を作ってしまう可能性があるんで要注意文字と言えるでしょう。

末尾に「$」のディレクトリ

 共有フォルダの下位に存在していると、隠しディレクトリになります。
 つまり簡単には他所から閲覧できないという用途があるのですが、意図しないでうっかり末尾に$を付けちゃうと、わざわざ共有したのに一覧に表示されなくて、閲覧できない・・・というトラブルに会うことがあります。



 用途次第ではあるんですが、目的によって次のようなタイプも問題になる事があるそーです。
 私は特に気にしたことはありません。

「(」「)」「[」「]」「{」「}」「&」「$」「`」「^」「~」正規表現で意味を持つ文字

 「~」は再登場です。
 単に記述が面倒なだけでエスケープすりゃ良いです。
 もちろん目的を持って使用するのは一向に構いませんし、正規表現って何?という方も気にする必要はないでしょう。

「@」アットマーク

 例えばホームページ上に置くファイルの場合にわりと困ります。
 ソフトによってドメイン指定の記述と誤読しちゃうかららしいので、用途によってNGになってしまう例だと思います。


「+」プラス

 最近ではあまり問題になりにくいモノですが、たまに困ったことに出くわすことがあります。
 例えば、ファイルサイズが大きくて分割した後に、ファイル連結のコマンド実行の際に困ったことになる場合があります。
 多くのツールでは、copyコマンドをBATコマンドにして連結している場合が多く、そのファイル連結の際にこんなコマンドを発行するんですよ。
C:\>copy text1.txt + text2.txt text3.txt
 これは、「text1.txt」と「text2.txt」を連結して「text3.txt」を作成してください・・・というコマンドになります。
 もちろんスペースは詰めることも可能なんで、連結記号なのかファイル名なのか悩むことになるでしょう。
 まぁ、厳密な記述にすれば問題は起こらないでしょうが、システムの運用開発とかやってると地雷を踏んでしまうことがあります。


「&」アンド

 これも再登場ですが、そろそろ語っても大丈夫かな?というので追加掲載です。
 わりとよくある脆弱性のレポートに「悪意を持って加工されたファイル名・・・」というのは、コレがキモになります。
 要するに、ホームページ上に置くとリクエストの引数として扱われてしまうため、いわゆるGET呼び出しの動きをすることがあります。
 ただこれ、配置場所は別にホームページ上でなくても構わないっつーか、色んな悪用手段が開発されてまして・・・わりと長いこと使われている攻撃方法なので詳細は伏せておきます。
 ブラウザキャッシュとか、出所不明のZIPファイルとか、こういう記号が含まれている可能性がある「フォルダを開かない」って事が重要です。


※オマケ

フルパスで260文字以上になる名称

 NTFSの環境において、ファイル名の最大の長さは約3万2千文字まで使えます。
 ただし、Windowsの内部のAPIでもフルパス表記で260文字(MAX_PATHとして定義されてる)までしか対応していないものが多く、エクスプローラーも含めて操作不能に陥ることがあります。
 実際、エクスプローラーなどでも削除することもできなくなりますので、悪意あるソフトで悪用されるシーンが多々あります。
 (こういったファイルができてしまったら、コマンドプロンプトからショートファイル名で操作することで削除することが可能です)
※260文字という中途半端(?)な数字なのは、ドライブレターや、UNC表記のための予約分があるためです。


アンダーバー「_」はどうなのよ?

 このページにディープリンク貼られてるようなので補足ですが、別にいーんじゃね?と思います。
 特にシステムに由来するようなトラブル事例を聞いたことがありませんし、前述のように半角スペースの代替としても使われます。
 ただし、フォントの都合で文字数が分からない特殊性がありますので、アンダーバーを2つ以上繋げることは推奨されないでしょう。
 2文字以上続けて書くと繋がって見えて、文字数が分からないということを言っています。
 例えば「123」は明らかに3文字ですが「___」これ何文字?って、フォントの種類によっては判断できません。


先頭に!や#を入れるのはどうですか?

 個人的な見解ですが先頭に記号を入れるのは、用途次第だと思います。
 いわゆるインクリメンタルサーチという、リストの中からダイレクトにアイテムを探すのに便利な機能の一つですが、エクスプローラーでは先頭一致しか使えません。
 つまり、良く使う名称に使うのは賢明とは言えません。

 逆にアクセスしにくくするという意味合いで付与するケースはアリです。
 例えば、テンポラリファイルや、マスターデータのファイルなどといった用途に向いてます。


使えない文字や、特定の語句、例外的なルールがある理由は?

 私が答えるべき内容じゃない気もしますが、一応私なりの回答です。
 そもそも、コンピューターにとって「文字」とは、人間に読ませるためだけの記号であり、あまり意味のある情報じゃないんですよ。
 コンピューターが扱える情報って、最終的には機械的なスイッチのON/OFFであり、それを「人間の読みやすいように」という都合で2進数→16進数→コードから各種文字への変換表→人間が読める文字や文章なのです。

 そしてコンピューターにとって重要なのは、プログラム(命令)、処理する対象(データ)の、2種類の情報であり、何かしら処理した結果のデータを、人間様に分かるように、上記のルールに従って加工したものが文字なんですね。
 ですから、コンピュータの制御という最優先のルールがあり、その進化の歴史にまつわる制限というのも当然付いて回ることになりますし、Windowsよりも後に生まれた文字も対応不能なケースが多々あります。

 分かりやすい事例だと、最近ではPCでも使える文字で「絵文字」とかもありますけど、表示ソフトの「データ」としての対応であり、大抵の「命令」の対象となる制御が絡む部分では使えないものとして分類されるということです。
 もちろんファイル名とかは、「命令」の対象となる制御が絡む部分なので、こういった例外的な制限が付きまとうわけです。

 そうですね、当然だと思われてると思いますが、「同じディレクトリに、hoge.txtが複数存在できない」とか、よーっく考えると酷い制限ですよね。
 例えば、同じディレクトリに格納した4月1日に保存したhoge.txtと、5月3日に保存したhoge.txtが、共存できないってのはコンピューター側の都合であって、運用する人間の都合ではありません。
※ジャーナルとか履歴管理とか、そーいった別の概念でコンピュータの制限を回避するような場合もあります

 他にもファイル名の大文字・小文字を区別しないとか、言語学の観点からしたら「ふざけるな」と言いたくなるでしょうね。
 制御の対象になる制限というのは、こういうことなんです。


Windowsのファイル検索でヒットしない文字

 エクスプローラなどでは「-」 「+」 「(」 「(2)」 「,」「、」「。」など、文を分かつ目的の記号文字が引っかかりません。
 他にも全角記号とかも無視されますが、ごく一般的な文字である「首」などもOSによって引っかからない文字である場合もあります。
 趣旨から外れるので、深追いしませんが「~=」などの演算子が必要になるとか、Windowsのファイル検索は引っかからないパターンが大量にあるってことだけ認識しておけば十分かと思います。

 他にも、XP以前は文字単位での検索であったのに対し、Vista以降では単語単位での検索に仕組みが変わっており、Windowsを使う以上は慣れるか、別のソフトをインストールするかの2択です。
 しかもWindowsのバージョンによって、改良と言う名の下にNGな文字がむしろ増えていたり、出力結果が異なりますので、検索に引っかからない!って問い合わせをする時は、OS名を書かないとだめでしょう。
 個人的に納得できないケースだとWindows Updateで揺らいだことにも遭遇したことが何度となくあります。

※単語で検索する際のNG例(OSの種類やインデックスの状態により結果が揺らぎます)
元ファイル「赤毛のアン.txt」
OKな入力例:アン.txt
NGな入力例:ン.txt(「ン」が単語とみなされないため)

 まぁ日本語はともかく、記号を使うファイル名は、基本的にNGってことなのでしょう・・・(2)とかエクスプローラーが勝手につけちゃうこともあるんで納得はできないですが・・・。
 だからこそ、ファイラーなんぞ作ってるわけですし、独自の検索機能を用意しているわけです(苦笑)