ネットで調べると様々なページで言及されているが、なんだか結構意見がバラバラ。どうもWindowsのOS種類やバージョンによって微妙な差異があったりしていたのが原因っぽい。
 ファイル名についての制限は試験でもよく確認される項目のため、いろいろ検証してみたこと等まとめ。
 ・以下はWindows7SP1で検証した内容となります。他のWindowsについてもいずれまとめる。
 ・規格その他の情報については2017年5月時点のものになります。追加情報あり次第修正。

 ・内容は独自研究のため間違っている可能性あり
 

●ファイル名・フォルダー名に使用できない文字

 Windows7では下記の文字がファイル名・フォルダー名に使用できません(全角であれば可)
 \ / : ? " < > |
 使用できないファイル名については、Windows7でもアプリによってまれに;(セミコロン)と,(カンマ)も使用できません、というメッセージが表示される場合があります。おそらくFAT時代の制限メッセージがそのまま使われているから?
 =(イコール)はFAT時代には使用できなかったが、Windowsでは問題なく使用可能。ただし、ファイル名の処理でおかしな処理となった経験があるため記号などの確認を行う場合、ついでに試した方が良いかもしれません。

 

●ファイル名に使用できない名前

・Windowsの場合、システム予約語を含む文字列は指定できない
 CON, AUX, COMn (nは1~9), LPTn (nは1~9), PRN, NUL

 ただ、ファイルを作成するアプリによってはCOMnやLPTnあたりは処理が間違っているのか、COM1はダメだがCOM9だと作成できたりすることがある。試験時にはこのあたりは確認した方が良い。
 他にもシステム予約語には「CLOCK$」があるが、これはなぜかWindowsではファイル名に指定できる。理由は不明。

 

●ファイル名に使用できるが問題が起きやすい文字

・サロゲートペア文字
 いわゆる4バイト文字。日本語は2バイト文字と思い込んでいるプログラマに対して突き刺さる面倒くさい文字。
 ↓ここに詳しい
 http://w3.kcua.ac.jp/~fujiwara/jis2000/jis2004/jisx0213-2004-surro.html
 Windowsでサロゲートペアに対応したのは、Windows VistaのJIS2004対応以降のため、古めのプログラムやそれを引き継いだ
 プログラムでは対応していないことが多い。
 そもそも読み込めないのほか、読み込めるがアプリ上ではファイル名が文字化けしているといったケースに遭遇したことあり。
 
・特定のUnicodeバージョンに依存した文字
 良く「機種依存文字」などと呼ばれることが多い記号系を含むカテゴリー。上記サロゲートペア文字も実はここに含まれる。
 Windowsのファイル名に使われる文字コードはデスクトップの文字コードに依存するため、いわゆるShift_JISに含まれないUnicord文字(化け文字等)は使用できなかったりうまく処理されなかったりしやすい。
 またUnicordはバージョンアップごとに文字が追加されたりしているため、Unicord処理系でも扱えない文字が出たりして余計にややこしい。
 以下は問題が発生しやすいバージョンと追加された文字について 

 Unicord3.2.0(2002年3月)
  このバージョンでJIS X 0213規格に正式対応している。以下の文字が追加された。
  俱剝𠮟吞噓姸屛幷瘦繫

  また、一部の文字が旧字で表示されるようになった(これ以前のバージョンと文字形が違う)
  ↓ここ参照
  https://ja.wikipedia.org/wiki/JIS_X_0213

 Unicode 5.1.0(2008年4月4日)
  このバージョンより、スターマーク(電話の米印)や麻雀牌、トランプやドミノといった記号に対応。

  ↓麻雀牌の文字コード
  http://www.unicode.org/charts/PDF/Unicode-5.1/U51-1F000.pdf
 
  ↓トランプとかドミノとか
  http://www.unicode.org/charts/PDF/U2600.pdf
  
  この中だと「♥」は比較的携帯電話などで良く使われる。

 Unicode 6.0.0(2010年10月11日)
  携帯電話の絵文字に対応。これ以降の7.0、9.0でも絵文字が追加されている
  ↓絵文字一覧
  https://ja.wikipedia.org/wiki/Unicode6.0%E3%81%AE%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7

・Unicord制御文字
 メモ帖などで右クリックした際にメニューから指定可能。
 アプリによってはこれを含んだファイル名を正しく表示できなかったり、開けなかったりする。
 RLO(文字列を右から左に並べる)などはファイル名偽装などで悪用されやすい。

 ‮
・半角スペース
 Windowsではファイル名に半角スペースを指定可能(というかOSが作成するシステムフォルダ名に普通に使用している)。
 ただしMS-DOS時代では半角スペースが区切り文字だった関係上、ファイル名として使用できなかった。この仕様を引き継いでいる
 一部アプリで問題になることがある。
 特に先頭、末尾スペースが良くやらかす。

・先頭に.(ドット)
 ファイル名およびフォルダ名の先頭にドットがある場合、パスの処理がおかしくなることがある。(エクスプローラーそのものの動作がおかしくなることがある)
 なお、末尾ドットはWindows上では指定できない。

 ファイル名は普通に先頭ドットを含む名前で作成可能だが、フォルダは通常の方法では作成できない。

 フォルダの場合「.名前.」のように前後にドットを付けて確定すると、末尾ドットが省略されて先頭ドット名を作れる。

・正規表現文字
 具体的にはこのあたり。正規表現を使ってファイル名制限している場合、エスケープが甘いとこのあたりが引っかかりやすい。
 ( ) [ ] { } & $ ` ^ ~
 特に()はWindowsでファイルコピーをした際に「XX-コピー(2)」のようなファイル名が作られるため、特に注意。

・~(チルダ)
 ~(チルダ)は8.3形式のショートファイル名に使われるため、ショートファイル名と混同される(あるいは同名ファイルとなる)可能性がある。

 

●ファイル名の長さ

 Windowsのエクスプローラーで指定可能なファイル名の長さはWindows9x系とNT系で異なる点に注意(古いプログラムでまれに引っかかります)
 Windows9x(95、98、Me)系ではファイル名に使用できる「バイト数」が255だった。そのため、半角255文字、全角127文字まで指定可能だった。
 WindowsNT(2000以降)系ではファイル名に使用できる「文字数」が255文字になった。文字バイト数に関わらず、255文字まで使用できる。
 
 また、ファイル名とは別に、絶対パス含めた259文字(258文字+制御文字1文字)まで指定可能。ドライブ名+フォルダパスを含む点に注意。
 
 一応ファイル名としてはNTSCでは32676文字まで可能となっているはずだが、FAT時代の名残からか(C++等の「MAX_PATH」定数の制限?)
 現状でもWindowsのエクスプローラーなど多くのアプリでは絶対パス260文字の制限が使われていることが多い。大体Microsoftのせい。

 なお、パス+ファイル名を含めて260文字を超える状態を作り出すことは可能。手順は以下の通り
 1. フォルダパス+ファイル名(拡張子込み)+制御文字1文字で259文字以下の状態を作る
 2. ファイル名の上位フォルダの名前をリネームする→リネームにより、パス+ファイル名が260文字以上にする
 

 とりあえずこんなものかな