You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Apache Ant中basename任务的@suffix参数不区分大小写?

Ant中不区分大小写获取无扩展名文件名的方法

我在构建文件里声明了:

<basename property="filename" file="${args.input}" suffix="XML"/>

其中${args.input}是通过Oxygen转换场景传入的,比如-Dargs.input="${cfd}\PMC-min.XML",此时${filename}返回PMC-min,这是预期的无扩展名结果。

但把后缀改成小写后:

<basename property="filename" file="${args.input}" suffix="xml"/>

${filename}返回的是PMC-min.XML,显然@suffix参数是区分大小写的。

我可以修改${args.input}或者确保扩展名大小写匹配,但想知道Ant里有没有不区分大小写获取无扩展名文件名的方法?


方法1:结合tolower统一扩展名大小写

先提取输入文件的扩展名并转成小写,再用basename处理:

<!-- 提取原始扩展名并转为小写 -->
<basename property="original.ext" file="${args.input}" suffix=""/>
<propertyregex property="lower.ext" input="${original.ext}" regexp=".*\.([^\.]+)" replace="\1" casesensitive="false"/>
<tolower property="lower.ext" value="${lower.ext}"/>

<!-- 用统一后的小写后缀截取文件名 -->
<basename property="filename" file="${args.input}" suffix=".${lower.ext}"/>

方法2:正则替换直接移除扩展名(不区分大小写)

用propertyregex任务匹配任意大小写的扩展名并直接移除:

<propertyregex property="filename" input="${args.input}" regexp="^(.*)\.[^\.]+$" replace="\1" casesensitive="false"/>

这个正则会忽略扩展名的大小写,直接截取最后一个.之前的内容。

方法3:Script任务自定义处理(灵活直接)

如果你的Ant版本支持脚本任务,用JavaScript直接处理文件名,完全不区分大小写:

<script language="javascript">
    var input = project.getProperty("args.input");
    var lastDot = input.lastIndexOf(".");
    project.setProperty("filename", lastDot !== -1 ? input.substring(0, lastDot) : input);
</script>

不管扩展名是XML还是xml,都会直接截取最后一个.之前的部分作为无扩展名文件名。

内容的提问来源于stack exchange,提问作者Caroline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:01:05