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