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

标签 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

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

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

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

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

最佳答案

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

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

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

关于java - Windows 批处理文件 popd 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883665/

相关文章:

java - 使用参数args编写JavaConfig bean间依赖

java - 当我的站点使用 HTTPS 协议(protocol)并且它的页面包含来自没有 HTTPS 的站点的图像时,如何避免 Web 浏览器警告?

c# - 移动和删除文件的密码确认?

c# - 关于.bat 脚本转义字符的识别?

regex - 从批处理脚本中的字符串中提取数字

java - 在RequestPermissionsResult 上再次请求位置权限

java - 根据不同的分隔符解析字符串

java - 如何将 FTP 链接复制到 Windows 系统剪贴板?

windows - 如何更改年龄不匹配的 PDB 以正确匹配?

windows - 当某些字段为空时,Windows 批处理文件如何从带分隔符的文本文件中正确读取数据?