Choose Highest Numbered File - Batch File

后端 未结 2 677
情书的邮戳
情书的邮戳 2020-12-16 04:14

I have a directory full of .jar files, named progressively like so:

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

I am trying to select the

相关标签:
2条回答
  • 2020-12-16 04:30

    We need delayed expansion

    setlocal enabledelayedexpansion
    

    Just a variable for the maximum:

    set max=0
    

    Then iterate over the files:

    for %%x in (version-*.jar) do (
    

    We need the file name without extension

      set "FN=%%~nx"
    

    And remove the version- from the start:

      set "FN=!FN:version-=!"
    

    Now FN should contain just the number and we can compare:

      if !FN! GTR !max! set max=!FN!
    )
    

    And we're done:

    echo highest version: version-%max%.jar
    

    The complete batch file:

    @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
    
    0 讨论(0)
  • 2020-12-16 04:52

    Here is a slightly simpler version than Joey's code.

    @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
    

    This code will work even if the version numbers are zero prefixed as long as the version number is never 0 (zero). Specifying tokens=1* with 0 included as a delimiter causes leading zeros to be stripped from the version number while preserving all zeros after the first non-zero digit.

    There is a simpler solution if all versions are zero prefixed to a constant width. But this solution works both with and without zero prefixing.

    Joey's code will fail if leading zeros are present because that indicates octal notation. Invalid octal digits with leading zeros will be treated as strings causing the comparison to give the wrong result. This is probably not an issue since the original question implies leading zeros are not present. But better to be safe than sorry.

    0 讨论(0)
提交回复
热议问题