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

luc*_*web 3 java windows command-line batch-file

我使用以下批处理脚本来运行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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

jeb*_*jeb 5

setlocal没有ENDLOCAL原因这个问题在这里.

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

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