Existem vários caracteres que têm um significado especial para o Windows (e para o DOS, de onde a maioria dos caracteres veio originalmente)
de MSDN :
A filename cannot contain any of the following characters:
\ / : * ? " < > |
/ é um comutador (e também um separador de diretórios).
\ é um separador de diretórios.
: é um designador de unidade.
* e ? são caracteres curinga usados na pesquisa.
" é uma maneira de permitir espaços nos parâmetros.
< e > são redirecionamentos que permitem a entrada e a saída de um programa, e ir para algo diferente que screen / keyboard.
| é um pipe que permite que a saída de um programa seja usada como entrada para o próximo.