Как раз тогда, когда я думал, что видел все это с проблемами пути к Windows, я столкнулся с ситуацией, которая не срабатывает, когда используется '/' (forward-slash), когда используется разделитель путей:Почему оболочка cmd.exe на 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 по:
Naming Files, Paths, Namespaces
Который ведет меня спросить: почему это происходит, и является есть ли окончательный источник, который документирует эту причуду?
UPDATE:
dbenham указывает на то, что проблема присутствует независимо от того, являются ли пробелы в имени каталога, поэтому удалена ссылка на него в названии и расспросить тело. Также добавлен пример «cd ./», который работает, а другие - нет.
'/' может использоваться как разделитель путей на уровне API, но вы не вызываете API напрямую. Вы используете cmd.exe, а cmd.exe анализирует параметр '/' как параметр командной строки. –
Я подозревал столько же, но и ожидал, что что-то, покрывающее этот случай, будет где-то зарегистрировано. Документация, которую я нашел, охватывает разделители путей - даже в контексте оболочки cmd - не упоминает эту конкретную проблему, насколько я могу судить. – Garen
Где документация, которая говорит, что косая черта может использоваться в качестве разделителя путей в cmd.exe? –