Windowsbatch filepopd不按预期工作

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

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

该工具的目录是C:\ tool \用户在C:\执行batch file后,用户将保留在C:\ tool \ not C:\

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

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

没有endlocal的setlocal导致这个问题。

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

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

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

 pushd .