批处理/cmd文件未返回。

3
我想要启动一些 .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

"为什么?" 有时我想,“为什么?” 有时我想,“既然如此?我该如何将目录改回来?"

2个回答

3

使用call命令:

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

使用call将调用另一个脚本,当它完成后,它将返回到您的脚本。

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


1
哦!如果不调用它,它就不会返回到第一个脚本中,对吗?谢谢,请在答案中包含这个解释。 - Gangnus
已添加。call上也有一个链接解释它的行为。 - baldr

2
使用pushd保存当前目录,然后使用popd在运行其他cmd文件后恢复它。
pushd .
call C:\Oracle\Middleware\Oracle_Home\user_projects\domains\wl_server\bin\setDomainEnv.cmd 
popd

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


抱歉,那些 pop/push 操作是多余的。只需要调用 call+cd 就可以了。但还是谢谢你。 - Gangnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接