Есть ли способ получить текущий рабочий каталог диска кроме текущего диска?
Windows хранит текущий каталог каждого диска, а %cd%
получает текущий рабочий каталог фактического диска.
Если я изменю диск в пакетном сценарии, я могу получить текущий рабочий каталог фактического диска:
cd w:\Downloads
cd c:\Windows
c:
(echo %cd%)
w:
(echo %cd%)
Есть ли способ получить текущий рабочий каталог без, изменив фактический диск?
@CatCat, возможно, является «текущим каталогом», не лучший вариант для его названия. Но AFAIK «система запоминает последний текущий путь для каждого тома (буква диска)» (docs.microsoft.com/de-de/windows/desktop/FileIO/…), и система сохраняет эти «последние текущие пути» в этих «странных переменных» (blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133). Мой ответ ниже
@CatCat: Вы правы. Смотрите обновление моего ответа.
После поиска ответа я нашел несколько подсказок о странные переменные под https://blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133
используйте %=c:%)
для текущего каталога диска c или %=w:%)
для w
Или в пакетном скрипте:
cd c:\Windows
cd w:\Downloads
(echo %=c:%)
(echo %=w:%)
ОБНОВИТЬ
Как отметил @RossRidge, это не Windows хранит эти странные переменные, а командный процессор DOS. Эти странные переменные известны только в текущем «сеансе». То же самое и для cd
(см. Комментарий @Stephan)
Открытие двух командных процессоров DOS:
В первом командном процессоре DOS:
cd c:\Windows
cd w:\Downloads
(echo %=c:%)
-> c:\Windows
(echo %=w:%)
-> w:\Downloads
cd w:
-> w:\Downloads
Во втором командном процессоре DOS:
(echo %=w:%)
-> %=w:% <- this variable is not set, not known
cd w:
-> w:\
Обратите внимание на несовместимый способ удержания «текущего каталога»: cd
возвращает корневой каталог после ввода командного процессора DOS. Но %=w:%
не ставится, пока каталог не сменится!
Вы также заметите, что Windows на самом деле не хранит текущий каталог каждого диска: «Win32 не имеет концепции отдельного текущего каталога для каждого диска, но командный процессор хотел сохранить старое поведение MS-DOS, потому что люди были к нему привыкли (и на него полагались пакетные файлы). Решение заключалось в том, чтобы сохранить этот «текущий каталог для каждого диска» в среде с использованием странного имени переменной среды, чтобы он не конфликтовал с обычными переменными среды ».
@RossRidge: Спасибо за ваш комментарий. Смотрите обновление моего ответа.
если вы просто хотите это знать, cd w:
также вам подскажет. (Но в пакетном сценарии эти переменные, безусловно, более полезны.)
@ Стефан: Спасибо за подсказку. Смотрите обновление моего ответа.
Ваши предположения ошибочны. В Windows есть только один текущий каталог. Для совместимости с MSDOS CMD.Exe делает вид, что для каждого диска существуют текущие каталоги.