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

Как раз тогда, когда я думал, что видел все это с проблемами пути Windows, теперь я столкнулся со случаем, который терпит неудачу только тогда, когда используется '/' (прямой -косая черта )в качестве разделителя пути.:

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.

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

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

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

C:\temp\tcbugs>mkdir dir2_no_spaces

C:\temp\tcbugs>cd./dir2_no_spaces

C:\temp\tcbugs\dir2_no_spaces>cd..

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

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

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

ОБНОВЛЕНИЕ:

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

16
задан Garen 9 May 2012 в 23:38
поделиться