我有一个完整的.jar文件的目录,像这样渐进地命名:
version-1.jar version-2.jar version-3.jar
我正在尝试select编号最高的文件。 有没有真正简单的方法来做到这一点? 因为.\version*.jar
会导致一个错误,据推测是由于多个文件?
我们需要延迟扩张
setlocal enabledelayedexpansion
只是一个变量的最大值:
set max=0
然后遍历这些文件:
for %%x in (version-*.jar) do (
我们需要没有扩展名的文件名
set "FN=%%~nx"
并从一开始就删除版本:
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
这是一个比乔伊的代码稍微简单的版本。
@echo off setlocal enableDelayedExpansion set max=0 for /f "tokens=1* delims=-.0" %%A in ('dir /b /ad version-*.jar') do if %%B gtr !max! set max=%%B echo higest version: version-%max%.jar
只要版本号不为0(零),即使版本号为零,也可以使用此代码。 指定标记= 1 *,将0作为分隔符包含在前面的零将从版本号中除去,同时在第一个非零数字之后保留全零。
如果所有版本都以零宽度为前缀,则有一个更简单的解决方案。 但是这个解决方案既有零也有零前缀。
如果前导零存在,Joey的代码将会失败,因为这表示八进制符号。 前导零的八进制数字无效将被视为字符串,导致比较结果错误。 这可能不是一个问题,因为原来的问题意味着前导零不存在。 但最好是安全而不是遗憾。