select最高编号的文件 – batch file

我有一个完整的.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的代码将会失败,因为这表示八进制符号。 前导零的八进制数字无效将被视为字符串,导致比较结果错误。 这可能不是一个问题,因为原来的问题意味着前导零不存在。 但最好是安全而不是遗憾。