Как установить переменную в путь родительского каталога в Windows?

Снова перебираясь с командной строкой, я выясню, что я могу сохранить текущий рабочий каталог в переменной следующим образом:

SET current=%cd%

Как бы установить родительский элемент? SET parent=%..% не работает, поскольку он эхосигнал %..%

В принципе, вызывая пакет script C:\a\b\myscript.bat со следующим содержимым:

@echo off
set current=%cd%
echo %current%

печатает C:\a\b, и я хотел бы установить переменную parent, чтобы она печатала C:\a, не меняя текущий рабочий каталог на ..

Возможно ли это?

Ответы

Ответ 1

Переместитесь вверх по каталогу, вспомните текущее, установите родительский элемент, а затем поместите каталог обратно туда, где вы начали.

@echo off
set current=%cd%
pushd ..
set parent=%cd%
popd

echo current %current%
echo parent %parent%

Ответ 2

Вы также можете сделать что-то вроде этого:

set current=%CD%
set parent=%CD%\..

Это не дает вам канонического имени родителя, но всегда должно быть допустимым путем к родительской папке. Он также будет несколько быстрее, чем решения, включающие pushd и popd, но это не будет основным соображением в пакетном файле.

Изменить: Обратите внимание, что все решения до сих пор, включая мои, будут иметь проблемы, если текущая папка является корнем диска. Из этого нет чистого и простого выхода, так как на самом деле нет родителя привода, видимого для пользовательского режима.

Ответ 3

Использование

pushd targetFolder
set current=%cd%
popd

Pushd/popd поддерживает стек ранее посещаемых каталогов.