Cómo obtener la última cadena de versión de una colección de carpetas donde el nombre de la carpeta es la cadena de versión

3

para la estructura de carpetas como abajo

RootFolder
   |
   |--1.2.3 
   |--1.2.4
   |--2.1.3
      ...
      ...
      ...

Bajo RootFolder, hay una colección de carpetas, y todas tienen nombre con la cadena de versión

Al usar el comando de Windows Batch, ¿hay una manera de ordenarlos y obtener la versión más grande?

¡Gracias!

jojo
fuente

Respuestas:

3

Obtenga la "última" versión de un directorio de directorios

Una pregunta interesante, ya que es un lote de Windows! dir es tu amigo aquí; pedir prestado a La respuesta de PabloG sobre SO :

@ECHO OFF
FOR /F %%I IN ('DIR *.* /B /O:G-N') DO ECHO %%I & EXIT /B

Colocar en RootFolder llamado lastversion.bat (o lo que sea). Puedes probar invocando desde cmd.exe 1 .

Tenga en cuenta que sólo he probado esto usando un muy muy número limitado de "como una versión" directorios con nombre de directorio.

Explicación

FOR /F %%I IN - Lazo ( FOR ) a través del siguiente conjunto de archivos ( /F ), usando la variable I ( %%I ) 2

'DIR *.* /B /O:G-N' - Listar todos los archivos ( *.* ) en el directorio, en formato simple ( /B ), clasificación /O: ) Invertir alfabéticamente 3 ( -N ) directorio primero ( G ) 4

DO ECHO %%I & EXIT /B - Imprimir el primero nombre de archivo y terminar inmediatamente ( EXIT ) la solo archivo por lotes ( /B )

Notas al pie adicionales

1 @ECHO OFF suprime el eco de comandos , pero probablemente ya sabias eso

2 %%I - use dos signos de porcentaje dentro de un archivo por lotes, o si se trata de un aviso interactivo, solo %I

3 revertir alfabéticamente significa que no nos importa qué versión realmente se escribió para durar y simplemente estamos obteniendo el número de versión más alto; esto podría no ser deseable

4 Agrupe los directorios primero para que los archivos sin formato se ordenen hasta el final y, por lo tanto, se ignoren.

bertieb
fuente
gracias, pero obtenga la última carpeta por fecha en lugar de comparar el contenido real. será arriesgado si la carpeta con una versión mayor no se crea más tarde que la carpeta que tiene una versión más pequeña
jojo
@jojo Esta versión debe devolver el el número de versión más alto, independientemente de la fecha . Si me equivoco en lo que estás preguntando, y quieres obtener la última versión por fecha de modificación tu podrías intentar -D en lugar de -N en el DIR especificación. (Creo que tal vez lea mi enlace en lugar de la respuesta)
bertieb
Gracias por la rápida respuesta, no lo he intentado y, como usted dijo, leí el enlace en lugar de su contenido. Después de pisar a través de su explicación detallada. Creo que debería funcionar.
jojo
No se preocupe, avíseme si no lo hace y solucionaré problemas con @ enmendar :)
bertieb
1.0.0.2 será pequeño que 1.0.0.12
jojo
1

Las clasificaciones numéricas "naturales" que reconocen y clasifican los números por su valor numérico son un dolor real con el lote de Windows. Se puede hacer, pero el hecho de que tenga varios números hace que el problema sea mucho más engorroso.

El problema se resuelve fácilmente con JSORT.BAT - una utilidad basada en script puro (JScript / batch híbrido) que se ejecuta de forma nativa en cualquier máquina Windows desde XP en adelante.

Para obtener simplemente una lista ordenada:

dir /b /ad RootFolder | jsort /n

Para listar solo el número de versión más alto:

dir /b /ad RootFolder | jsort /n /r /c 1

Para establecer una variable a la versión más alta:

@echo off
setlocal
for /f "delims=" %%F in ('dir /b /ad RootFolder ^| jsort /n /r /c 1') do set "largest=%%F"
dbenham
fuente