====== Characters in file names ====== Note : this page often uses "Unix" for non-Windows systems, because Mac OS and Linux are both Unix-based systems. And the Web standard also originated on Unix systems, so for example, it's path separator is the same "/". ===== Path separators ===== * / in Unix and on the web. Windows also accpts it in some contexts, but sometimes not. * \ in Windows. But it's an escape character in Unix. * : was used in the old Mac OS up to version 9. See the [[#Mac : / confusion]] below. ===== Escape characters ===== * \ Unix escape * ^ Windows cmd.exe escape * ` Windows PowerShell escape (see also https://en.wikipedia.org/wiki/Escape_character) ===== Windows Powershell ===== The Windows Powershell (v. 2 in Win7) has a function `GetInvalidFileNameChars()` : [System.IO.Path]::GetInvalidFileNameChars() | ForEach-Object {$i=[int]$_; '{0,3} {1:X2} {2}' -f $i,$i,$_ } | Sort-Object 0 00 1 01 ☺ 2 02 ☻ 3 03 ♥ 4 04 ♦ 5 05 ♣ 6 06 ♠ 7 07 8 08 9 09 10 0A 11 0B ♂ 12 0C ♀ 13 0D 14 0E ♫ 15 0F ☼ 16 10 ► 17 11 ◄ 18 12 ↕ 19 13 ‼ 20 14 ¶ 21 15 § 22 16 ▬ 23 17 ↨ 24 18 ↑ 25 19 ↓ 26 1A → 27 1B ← 28 1C ∟ 29 1D ↔ 30 1E ▲ 31 1F ▼ 34 22 " 42 2A * 47 2F / 58 3A : 60 3C < 62 3E > 63 3F ? 92 5C \ 124 7C | So it lists the obvious control characters 0 to 31 (x00-x1F), plus * " * * * / * : * < * > * ? * \ * | ===== At start or end of file name ===== * space at the end of a file or directory name is ignored/removed by Windows. It is OK in Unix, but obviously a problem because it's invisible. * . dot at the end of a file or directory name is ignored/removed by Windows. * . dot at the start of a file or directory name makes it "hidden" in Unix. It will not show in normal directory listings and file managers. ===== Mac : / confusion ===== Mac OS in the eighties and nineties (up to version 9) was not a Unix-based system, and used ":" as a path separator. "/" had no special meaning for Macs, so it was accepted in file names like "report 25/3/1992". When Mac replaced it's OS with Unix, "/" became an invalid character in file names, but on the other hand, ":" was now a perfectly normal character. So it decided to silently replace all "/" with ":", and made it's graphical interface handle the translation invisibly. So you can still see this "report 25/3/1992" file in the Finder, and you can have the impression that you can still write a file named "report 25/12/2019". However, the real file name in the file system will be "report 25:3:1992", and some Mac programs will only see the real file name and not "translate" it on the fly.