我有一个充满 .jar 文件的目录,逐步命名如下:
version-1.jar
version-2.jar
version-3.jar
我正在尝试选择编号最高的文件。有什么真正简单的方法吗?因为doing.\version*.jar
导致错误,大概是由于多个文件?
我有一个充满 .jar 文件的目录,逐步命名如下:
version-1.jar
version-2.jar
version-3.jar
我正在尝试选择编号最高的文件。有什么真正简单的方法吗?因为doing.\version*.jar
导致错误,大概是由于多个文件?
我们需要延迟扩张
setlocal enabledelayedexpansion
只是最大值的一个变量:
set max=0
然后遍历文件:
for %%x in (version-*.jar) do (
我们需要不带扩展名的文件名
set "FN=%%~nx"
并version-
从一开始就删除:
set "FN=!FN:version-=!"
现在FN
应该只包含数字,我们可以比较:
if !FN! GTR !max! set max=!FN!
)
我们完成了:
echo highest version: version-%max%.jar
完整的批处理文件:
@echo off
setlocal enabledelayedexpansion
set max=0
for %%x in (version-*.jar) do (
set "FN=%%~nx"
set "FN=!FN:version-=!"
if !FN! GTR !max! set max=!FN!
)
echo highest version: version-%max%.jar
这是一个比 Joey 的代码稍微简单的版本。
@echo off
setlocal enableDelayedExpansion
set max=0
for /f "tokens=1* delims=-.0" %%A in ('dir /b /a-d version-*.jar') do if %%B gtr !max! set max=%%B
echo higest version: version-%max%.jar
只要版本号从不为 0(零),即使版本号前缀为零,此代码也将起作用。指定 tokens=1* 并包含 0 作为分隔符会导致从版本号中去除前导零,同时保留第一个非零数字之后的所有零。
如果所有版本都为零前缀为恒定宽度,则有一个更简单的解决方案。但是这个解决方案在有和没有零前缀的情况下都有效。
如果出现前导零,Joey 的代码将失败,因为这表示八进制表示法。带有前导零的无效八进制数字将被视为字符串,导致比较给出错误结果。这可能不是问题,因为原始问题暗示不存在前导零。但安全总比后悔好。