Есть ли способ изменить папку из пакета и остаться там после выполнения? - PullRequest
0 голосов
/ 25 октября 2019

Я хочу запустить пакетный файл из терминала, как только этот пакетный файл завершит свое выполнение, я хочу, чтобы терминал находился в текущем каталоге пакетного файла, любая идея?

Я хочу выполнитьпакетный файл и получить вывод, как это:

C:\Temp> batch_file
Moving prompt to another route
C:\Folder1\Files>

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Когда вы запрашиваете помощь, открывая cmd.exe и запуская pushd /?:

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

изменяется на указанныйкаталог.

PUSHD [путь |..]

путь Указывает каталог для создания текущего каталога.

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

если вы создадите что-то вроде example.cmd в C:\Temp с содержимым:

@echo off
pushd "C:\Folder1\Files"

Затем он выйдет из этого местоположения файла.

В качестве примечания для возвратадля папки, в которой вы начали, вам требуется popd, фактически вам нужно popd для каждого pushd.

0 голосов
/ 25 октября 2019

Ответ полностью изменился после лучшего понимания проблемы.

Я понимаю, что запрос

  1. Команда вызывается из терминала, начинающегося в некотором каталоге, таком как c:\temp
  2. Пакетный файл blarg.bat выполняется
  3. blarg.bat делает вещи в другом каталоге, например c:\temp\a\b\c
  4. Желание терминала сейчасбыть в 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 находится в глобальной области видимости, он покинет терминал на этом уровне. Однако в глобальном масштабе есть сценарии риска.

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