2015-12-22 3 views
2

Я хочу запустить некоторый .cmd-файл и остаться в том же каталоге.bat/cmd файл не возвращается

C:\Oracle\Middleware\Oracle_Home\user_projects\domains\wl_server\bin\setDomainEnv.cmd 

Проблема заключается в том, что при выполнении setDomainEnv.cmd остроумию около 10 других CMD файлов, вызываемых из него, я остался в совершенно другом каталоге. И я хочу быть там, где я начал. Поскольку я всегда начинаю в том же каталоге, я добавляю строку cd:

Echo on 
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\wl_server\bin\setDomainEnv.cmd 
Echo on 
cd /d C:\workspaces\DS8\swprods\dist-4.1.8-local-devel\ 

Без эффекта! Снова я остался в

C:\Oracle\Middleware\Oracle_Home\user_projects\domains\wl_server> 

И я даже не вижу 3,4 строки, которые появятся на консоли. Я мог понять все это, если некоторые из внутренних сценариев закончились ошибкой, но они заканчиваются ОК, без ошибок.

Было бы понятно, если бы некоторые из сценариев изменили каталог на другой диск, и для замены назад потребуется ключ/d. Но все делается на одном и том же диске C :.

Все операции в скрипте выполняются в том же исходном каталоге. После выхода из командного файла каталог изменяется.

.................................................... 
C:\workspaces\DS8\swprods\dist-4.1.8-local-devel>if "Oracle" == "Apple" (set MEM 
_ARGS=-Xms2048m -Xmx2048m -XX:CompileThreshold=8000 -XX:PermSize=128m -XX:MaxPermSize=256m -XX:MaxPermSize=256m) 

C:\workspaces\DS8\swprods\dist-4.1.8-local-devel>if exist C:\Oracle\MIDDLE~1\ORACLE~1\USER_P~1\domains\WL_SER~1\bin\setStartupEnv.cmd (call "C:\Oracle\MIDDLE~1\ORACLE~1\USER_P~1\domains\WL_SER~1\bin\setStartupEnv.cmd") 
^this is the last run line of the script 

«Почему?» и иногда я думал: «Почему?» а иногда я подумал: «Так, какие и как я могу изменить каталог назад

ответ

1

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

call C:\Oracle\Middleware\Oracle_Home\user_projects\domains\wl_server\bin\setDomainEnv.cmd 

вызов будет вызывать другой сценарий, и после того, как она будет завершена - это будет возврат к вашему сценарию? .

Если вы не используете call. - ваш поток выполнения переходит к этому другому сценарию, но не возвращает назад

+1

Oh! без вызова он не возвращается обратно в первый скрипт, не так ли? Спасибо, пожалуйста, включите это объяснение в ответ. – Gangnus

+0

Добавлено. Существует ссылка на 'call', также объясняющая его поведение. – baldr

+0

Отлично. Я уже отметил это. Большое спасибо. – Gangnus

1

используйте Pushd для сохранения текущего каталога используйте Popd, чтобы восстановить его после того, как вы запустите дру er cmd.

pushd . 
call C:\Oracle\Middleware\Oracle_Home\user_projects\domains\wl_server\bin\setDomainEnv.cmd 
popd 

Хорошая вещь о Pushd/Popd, они работают, даже если другой пакетный файл изменяет рабочую директорию в папку на другом диске.

+0

Извините, эти поп/толчок чрезмерны. call + cd достаточно. Но спасибо. – Gangnus

Смежные вопросы