3

我正在使用以下批处理脚本来运行 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

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

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

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

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

4

2 回答 2

5

没有 endlocal在setlocal这里导致了这个问题。

您只需要endlocal在调用之前添加一个popd

在您的代码中,popd返回到您的第一个目录,但是由于 setlocal 存储所有变量并且所有打开的 setlocals 在批处理退出时都被隐式 endlocals 关闭,因此它还将恢复 cd 变量。

于 2013-09-19T07:12:51.807 回答
1

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

pushd .
于 2013-09-19T00:18:05.583 回答