bat/cmd 文件不返回

Posted

技术标签:

【中文标题】bat/cmd 文件不返回【英文标题】:bat/cmd file does not return back 【发布时间】:2016-03-28 19:39:39 【问题描述】:

我想启动一些 .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 - 您的执行流程会转到另一个脚本但不会返回。

【讨论】:

哦!没有调用它不会返回到第一个脚本,是吗?谢谢,请在答案中包含该解释。 已添加。 call 上有一个链接也解释了它的行为。【参考方案2】:

使用 pushd 保存当前目录,然后在运行其他 cmd 文件后使用 popd 恢复它。

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

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

【讨论】:

对不起,那些 pop/push 太过分了。 call+ cd 就够了。不过谢谢。

以上是关于bat/cmd 文件不返回的主要内容,如果未能解决你的问题,请参考以下文章

bat/cmd脚本开发

cmd 运行批处理,路径中有括号不识别怎么办

转 BAT CMD 批处理文件脚本总结(中文)

1.3.1bat脚本命令RENAME REN 重新命名文件

bat/cmd将命令执行的结果赋值给变量

windows 自定义批处理BAT/CMD启动Redis等软件