Почему оболочка 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 ./' это работает, тогда как другие команды этого не делают.