Como obter a última versão da string de uma coleção de pasta na qual o nome da pasta é uma string de versão

3

para estrutura de pastas como abaixo

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

Em RootFolder, há uma coleção de pastas e todas elas nomeadas com string de versão

usando o comando Lote do Windows, existe uma maneira de classificá-los e obter a maior versão?

Obrigado!

jojo
fonte

Respostas:

3

Obter a "última" versão de um diretório de diretórios

Uma questão interessante, já que é o lote do Windows! dir é seu amigo aqui; empréstimo de A resposta de PabloG sobre SO :

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

Colocar em RootFolder nomeado lastversion.bat (como queiras). Você pode testar invocando a partir de cmd.exe 1 .

Por favor, note que eu só testei isso usando um muito muito número limitado de "versão-like" diretórios nomeados pelo diretório.

Explicação

FOR /F %%I IN - Loop ( FOR ) através do seguinte conjunto de arquivos ( /F ), usando a variável I ( %%I ) 2

'DIR *.* /B /O:G-N' - Listar todos os arquivos ( *.* ) no diretório, em formato simples ( /B ), classificação ( /O: ) em ordem alfabética inversa 3 ( -N ) diretório-primeiro ( G ) 4

DO ECHO %%I & EXIT /B - Imprima o primeiro filename e terminar imediatamente ( EXIT ) a apenas arquivo em lote ( /B )

Notas de rodapé adicionais

1 @ECHO OFF suprime o comando ecoando , mas você provavelmente já sabia disso

2 %%I - use dois sinais de porcentagem dentro de um arquivo de lote, ou se de um prompt interativo, apenas %I

3 inverter alfabeticamente significa que não estamos nos importando com qual versão foi realmente escrita para durar e apenas pegando o maior número de versão; isso pode não ser desejável

4 diretórios de grupos primeiro, para que arquivos simples sejam classificados no final e, assim, ignorados

bertieb
fonte
Obrigado, mas obter a pasta mais recente por data em vez de comparar o conteúdo real. será arriscado se a pasta de versão maior não for criada depois da pasta que possui uma versão menor
jojo
@jojo Esta versão deve retornar o número de versão mais alto, independentemente da data . Se eu estiver errado no que você está perguntando, e você quer obter a versão mais recente por data de modificação você poderia tentar -D ao invés de -N no DIR especificação. (Eu acho que você talvez leia meu link em vez da resposta!)
bertieb
obrigado pela resposta rápida, eu não tentei e como você disse eu li o link em vez de seu conteúdo. após o passo através de sua explicação detalhada. Eu acho que isso deve resultar.
jojo
Não se preocupe, deixe-me saber se isso não acontecer e vou resolver @ emendar :)
bertieb
1.0.0.2 será pequeno que 1.0.0.12
jojo
1

As classificações numéricas "naturais" que reconhecem e classificam os números por um valor numérico são uma dor real com o lote do Windows. Isso pode ser feito, mas o fato de você ter vários números torna o problema muito mais complicado.

O problema é facilmente resolvido com JSORT.BAT - um utilitário puro baseado em script (híbrido JScript / batch) que é executado nativamente em qualquer máquina Windows do XP em diante.

Para simplesmente obter uma lista ordenada:

dir /b /ad RootFolder | jsort /n

Para listar apenas o número da versão mais alta:

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

Para definir uma variável para a versão mais alta:

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