Пакетный файл получает текущий рабочий каталог после команды 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 . однако никогда не подведет...

больше информации

Другие вопросы по тегам