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?
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With