Пакетный файл получает текущий рабочий каталог после команды cd
Когда я запускаю командный файл, который лежит в C:\some\dir
Я знаю, что могу использовать %cd%
а также %~dp0
чтобы получить путь к самому пакетному файлу и другую информацию, как описано здесь.
Но мне не удалось получить "текущий рабочий каталог" после того, как пакетный файл выполнил пару cd
команды.
Так, например:
- Пакетный файл находится в
C:\some\dir
- Пакетный файл выполняется
cd sub
и позжеcd sub2
Как бы я получить путь к этой папке?
Должно дать C:\some\dir\sub\sub2
и будет эквивалентно pwd
Команда при выполнении всего вышеперечисленного вручную в командной строке!
Мне не повезло ни с одной из команд выше! Здесь сказано %cd%
переменная должна обновляться после cd
команды используются, но я всегда получаю C:\some\dir
в качестве вывода.
РЕДАКТИРОВАТЬ
2 ответа
Если ваш пакетный файл делает что-то вроде этого:
@echo off
echo Start at: %cd%
cd sub
cd sub2
echo Currently at: %cd%
Второй echo
команда покажет C:\some\dir\sub\sub2
наверняка. Однако если %cd%
помещается в блок кода, то есть заключен в скобки (как внутри if
или же for
команда), то это классическая задача отложенного расширения (как указано MC ND):
@echo off
setlocal EnableDelayedExpansion
>log.txt (
cd sub
cd sub2
echo Before this code block the current directory was: %cd%
echo But currently it is: !cd!
)
Для получения дополнительной информации ищите "отложенное расширение".
I) вы можете сохранить текущий каталог в начале скрипта:
@echo off
set "curr_dir=%cd%"
...some cd commands...
cd /d "%curr_dir%"
II) вы можете использовать pushd/popd
(может быть лучше)...
@echo off
....
pushd sub
...some commands...
popd
pushd sub2
...some commands...
popd
... или так, если указанные подкаталоги могут не существовать:
@echo off
....
pushd .
cd /D sub
...some commands...
popd
pushd .
cd /D sub2
...some commands...
popd
Объяснение: Предположим, вы успешно нажали sub
в стек каталога, но sub2
не может быть найден так pushd sub2
не удается и ничего не толкается, следующий popd
ип-толчки sub
неумышленно; толкая текущий каталог pushd .
однако никогда не подведет...