bat / cmd文件不会返回

时间:2015-12-22 13:59:03

标签: windows batch-file cmd windows-7 directory

我想启动一些.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行。我能理解所有这一切,如果一些内部skripts以错误结束,但他们没有错误就完成了。

如果某些脚本将dir更改为另一个磁盘并且返回更改需要/ 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

“为什么?”有时我想,“为什么?”有时我想,“因为哪个?我怎么能改回目录?

2 个答案:

答案 0 :(得分:1)

使用call

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

调用将调用另一个脚本,并在完成后 - 它将返回到您的脚本。

如果您不使用call - 您的执行流程会转到另一个脚本,但不会返回。

答案 1 :(得分:1)

使用pushd保存当前目录,然后在运行其他cmd文件后使用popd将其还原。

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

关于pushd / popd的好处是,即使其他批处理文件将工作目录更改为另一个驱动器上的目录,它们也能正常工作。