Dangercrow
Dangercrow

Reputation: 145

Choose Highest Numbered File - Batch File

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 highest numbered file. Is there any really simple way to do it? Because doing .\version*.jar causes an error, presumably due to the multiple files?

Upvotes: 9

Views: 6799

Answers (2)

dbenham
dbenham

Reputation: 130879

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.

Upvotes: 7

Joey
Joey

Reputation: 354694

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

Upvotes: 14

Related Questions