选择编号最高的文件-批处理文件



我有一个目录,里面装满了.jar文件,按如下顺序命名:

 version-1.jar
 version-2.jar
 version-3.jar

我正在尝试选择编号最高的文件。有什么真正简单的方法吗?因为执行.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(零),即使版本号前缀为零,此代码也能工作。指定包含0作为分隔符的标记=1*会导致从版本号中删除前导零,同时保留第一个非零数字之后的所有零。

如果所有版本都以零为前缀并具有恒定宽度,则有一个更简单的解决方案。但是这个解决方案在使用和不使用零前缀的情况下都有效。

如果出现前导零,Joey的代码将失败,因为这表示八进制表示法。带前导零的无效八进制数字将被视为字符串,导致比较结果错误。这可能不是一个问题,因为最初的问题意味着不存在前导零。但安全总比抱歉好。

最新更新