Почему оболочка cmd.exe в Windows не работает с путями, использующими разделитель пути с косой чертой ('/' ')?

В тот момент, когда я думал, что видел все проблемы с путями в Windows, я столкнулся со случаем, который дает сбой только тогда, когда «/»; (прямая косая черта) используется как разделитель пути:

<code>C:\temp\tcbugs>mkdir "dir1 with spaces"

C:\temp\tcbugs>echo hi > "dir1 with spaces"\foo.txt

C:\temp\tcbugs>type "dir1 with spaces\foo.txt"
hi

C:\temp\tcbugs>type "dir1 with spaces/foo.txt"
The system cannot find the file specified.
</code>

Что особенно интересно в этом, так это то, что он, по-видимому, специфичен для оболочки cmd.exe и не встречается в PowerShell (и предположительно в win32 API):

<code>PS C:\temp\tcbugs> type 'dir1 with spaces/foo.txt'
hi
</code>

Другим интересным моментом является то, что смена каталогов с помощью "cd" и используя "/"; используется как разделитель пути с cmd.exe работает:

<code>C:\temp\tcbugs>mkdir dir2_no_spaces

C:\temp\tcbugs>cd ./dir2_no_spaces

C:\temp\tcbugs\dir2_no_spaces>cd ..
</code>

Тем не менее, я не могу найти никаких ссылок на эту конкретную проблему ни в сети, ни в часто цитируемой документации MSDN:

Именование файлов, путей, пространств имен

Что заставляет меня спросить: почему это происходит, и есть ли определенный источник, который документирует эту причуду?

UPDATE:

dbenham указывает, что проблема присутствует независимо от того, есть ли пробелы в имени каталога, поэтому удалите ссылку на него в заголовке и теле вопроса. Также добавлен пример «cd ./' это работает, тогда как другие команды этого не делают.

Ответы на вопрос(3)

Ваш ответ на вопрос