Windows批处理文件popd无法按预期工作

时间:2013-09-18 22:56:23

标签: java windows batch-file command-line

我使用以下批处理脚本来运行Java命令行工具。

@echo off
pushd %~dp0
setLocal EnableDelayedExpansion
set CLASSPATH="
for /R ./libs %%a in (*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%a
)
set CLASSPATH=!CLASSPATH!"
java -cp !CLASSPATH! com.example.CLIApplication %*
popd

我已将工具的目录添加到System Variables PATH中,以便我可以通过命令提示符从任何目录运行它。这是有效的,但我看到的问题是:

该工具的目录是C:\ tool \ 用户在C:\ 执行批处理文件后,用户将保留在C:\ tool \而不是C:\

popd被调用但控制台导航回C:\ too \而不是留在C:\

如何在脚本完成后确保用户目录不会更改?

2 个答案:

答案 0 :(得分:5)

没有endlocal的setlocal会导致此问题。

您只需在致电endlocal之前添加popd

在你的代码中,popd返回到你的第一个目录,但是当setlocal存储所有变量时,所有打开的setlocals在退出批处理时被隐式的endlocals关闭,它也将恢复cd变量。

答案 1 :(得分:1)

我可能偏离轨道,但你为什么不使用:

pushd .