Ответ полностью изменился после лучшего понимания проблемы.
Я понимаю, что запрос
- Команда вызывается из терминала, начинающегося в некотором каталоге, таком как
c:\temp
- Пакетный файл
blarg.bat
выполняется blarg.bat
делает вещи в другом каталоге, например c:\temp\a\b\c
- Желание терминала сейчасбыть в
c:\temp\a\b\c
при выходе из сценария
Я был удивлен, что влияет на это ....
Меня учили всегда заворачивать сценарий в SETLOCAL
/ ENDLOCAL
, чтобы сохранить переменные локализованными, и это может позволить несколько вызовов процедурного типа.
Итак, я начал с этого:
@ECHO OFF
SETLOCAL
ECHO Starting at %CD%
CD "c:\temp\a\b\c"
ECHO Now at %CD%
ECHO:
ECHO This is where other stuff would be done
ECHO:
(ENDLOCAL
EXIT /B 0)
с ожиданием, что этозакончится вызовом терминала в "C:\temp\a\b\c"
. Но это не так.
Итак, я удалил обертку setlocal / endlocal.
@ECHO OFF
ECHO Starting at %CD%
CD "c:\temp\a\b\c"
ECHO Now at %CD%
ECHO:
ECHO This is where other stuff would be done
ECHO:
И теперь он дает желаемые результаты
c:\TEMP>blarg.bat
Starting at c:\TEMP
Now at c:\TEMP\a\b\c
This is where other stuff would be done
c:\TEMP\a\b\c>
Так что получается, чтопока cd
находится в глобальной области видимости, он покинет терминал на этом уровне. Однако в глобальном масштабе есть сценарии риска.