В Windows есть концепция текущих путей для каждого диска, по крайней мере, в оболочке. Это из старых времен, когда вы могли работать с двумя дискетами, и в них были открыты разные папки, и вы переключались между ними. На самом деле, я думаю, что подпапки были представлены только в DOS 2.0, а до этого были только разные диски, без обратной косой черты и без cd
.
Поэтому переключение дисков производится так:
C:\> D:
D:\>
... в то время как изменение одного из текущих каталогов выполняется с помощью cd
следующим образом:
D:\> cd relative_folder
D:\relative_folder> cd D:\absolute_folder
D:\absolute_folder>
Можно изменить каталог на другом диске, не переключаясь на этот диск, и это то, что вы случайно сделали:
D:\absolute_folder> cd C:\test
D:\absolute_folder> C:
C:\test> D:
D:\absolute_folder>
Также можно сослаться на текущий путь другого диска, просто указав букву диска без обратной косой черты:
D:\absolute_folder> dir C:
Directory listing of C:\test
...
D:\absolute_folder> dir C:hello
Directory listing of C:\test\hello
...
D:\absolute_folder> dir C:\
Directory listing of C:\
...
D:\absolute_folder>
И решение вашей проблемы: в современной Windows команда cd
имеет ключ /d
для неявного переключения дисков:
D:\absolute_folder> cd /d C:\something
C:\something>
Примечание: текущие пути для отдельного диска (для текущего процесса - текущие пути для процесса!) хранятся как магические скрытые переменные окружения, называемые =C:
=D:
и т. д.
Вы не можете назначить их обычно из-за знака равенства, но вы можете просмотреть их, используя echo %=C:%
и т.д. Или перечислив все переменные окружения, включая скрытые, с помощью хака (обратите внимание на двойную кавычку):
C:\something> set "
=C:=C:\something
=D:=D:\absolute_folder
...
Вы также можете увидеть текущий путь другого диска, используя cd
с буквой диска без какого-либо пути:
C:\something> cd D:
D:\absolute_folder
C:\something>
Для получения дополнительной информации, проверьте это: https://blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133
(Обратите внимание, что вне оболочки программы не должны заботиться об этом, потому что существует только один текущий рабочий каталог, который система Windows будет фактически использовать, а не один на диск. Материал для каждого диска - это всего лишь оболочка, созданная сверху, потому что она работала так с DOS.)