Как `pushd` точно ведет себя относительно пути с косой чертой`/`?
Рассмотрим следующие команды, полученные из командной строки:
D:\test>cd D:/
D:\>cd /test
D:\test>pushd D:/
The syntax of the command is incorrect.
D:\test>pushd "D:/"
D:\>popd
D:\test>cd ..
D:\>pushd /test
The syntax of the command is incorrect.
D:\>pushd "/test"
The syntax of the command is incorrect.
D:\>pushd "D:/test"
D:\test>
Кажется, что cd правильно обрабатывать слэши / в общем пока pushd принимает их только в том случае, если одновременно:
- Аргумент цитируется
- Полный путь указан
Это соответствует истине? Это где-нибудь задокументировано?
1 ответ
Прочтите статью MSDN Именование файлов, путей и пространств имен:
Соглашения об именах Следующие фундаментальные правила позволяют приложениям создавать и обрабатывать допустимые имена для файлов и каталогов независимо от файловой системы:
- Используйте точку для отделения имени базового файла от расширения в имени каталога или файла.
- Используйте обратную косую черту (\) для разделения компонентов пути. Обратная косая черта разделяет имя файла от пути к нему и одно имя каталога от другого имени каталога в пути. Вы не можете использовать обратную косую черту в имени для фактического файла или каталога, потому что это зарезервированный символ, который разделяет имена на компоненты.
- При необходимости используйте обратную косую черту как часть имен томов, например, "C:\" в "C:\path\file" или "\\server\share" в "\\server\share\path\file"для имен универсального соглашения об именах (UNC). Для получения дополнительной информации об именах UNC см. раздел Ограничение максимальной длины пути.
- ...
Больше читать на (\)/ (реверс) солидус: почему Windows использует обратную косую черту для путей и прямую косую черту Unix?
В интерпретаторе команд (cmd.exe), ты можешь использовать / в качестве разделителя компонентов пути во многих случаях, но не всегда. Пример:
==> d:\bat\so\second.bat a b c
second.bat parameters: %*=a b c
==> d:/bat/so/second.bat a b c
second.bat parameters: %*=a b c
==> type d:/bat/so/second.bat
The syntax of the command is incorrect.
==> type "d:/bat/so/second.bat"
The system cannot find the file specified.
==> type d:/bat/so\second.bat
The syntax of the command is incorrect.
==> type "d:/bat/so\second.bat"
@echo %~nx0 parameters: %%*=%*
==>
Другой пример:
==> dir d:/bat/so/second.bat
Parameter format not correct - "bat".
==> dir "d:/bat/so/second.bat"
 Volume in drive D is DataDisk
 Volume Serial Number is 4288-6B27
 Directory of d:\bat\so
File Not Found
==> dir "d:/bat/so\second.bat"
 Volume in drive D is DataDisk
 Volume Serial Number is 4288-6B27
 Directory of d:\bat\so
27.11.2015  17:35                32 second.bat
               1 File(s)             32 bytes
               0 Dir(s)  910 153 654 272 bytes free
==>