【JAVA】bat文件启动jar场景获取bat文件路径的方法

发布于:2025-04-17 ⋅ 阅读:(24) ⋅ 点赞:(0)

一、推荐方案:参数传递法

步骤1:修改BAT脚本
@echo off
java -jar -Dbat.file="%~f0" your-app.jar %*

关键参数说明:

  • %~f0:获取BAT文件的完整路径
  • %*:传递所有原始参数
步骤2:Java代码获取参数
public class BatFileNameGetter {
    public static void main(String[] args) {
        String batPath = System.getProperty("bat.file");
        if (batPath != null) {
            File batFile = new File(batPath);
            System.out.println("BAT文件名: " + batFile.getName());
            System.out.println("完整路径: " + batFile.getAbsolutePath());
        } else {
            System.out.println("未通过BAT脚本启动");
        }
    }
}

二、环境变量法

步骤1:修改BAT脚本
@echo off
set LAUNCHER_BAT=%~f0
java -jar your-app.jar %*
步骤2:Java代码读取环境变量
String batPath = System.getenv("LAUNCHER_BAT");

三、特殊场景处理

1. 路径含空格处理
:: 使用US-ASCII转义双引号
java -jar -Dbat.file="%22%~f0%22" your-app.jar
// 使用Apache Commons Lang解码
String decodedPath = StringEscapeUtils.unescapeJava(batPath);
2. 获取相对路径
:: 获取相对于JAR的路径
set RELATIVE_PATH=%~dp0
java -jar -Dbase.dir="%RELATIVE_PATH%" your-app.jar

四、最佳实践建议

  1. 参数验证:添加路径有效性检查
    if (batPath != null) {
        File f = new File(batPath);
        if (!f.exists() || !f.getName().endsWith(".bat")) {
            throw new IllegalArgumentException("无效BAT路径");
        }
    }
    
  2. 日志记录:记录完整的启动信息
    logger.info("启动器路径:{}", batPath);
    
  3. 路径消毒:防止路径注入攻击
    String safePath = Paths.get(batPath).normalize().toString();
    

选择参数传递方案可确保最可靠地获取BAT文件名,建议配合参数校验和日志记录增强健壮性。


网站公告

今日签到

点亮在社区的每一天
去签到