Como obter a última versão da string de uma coleção de pastas onde 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
      ...
      ...
      ...

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

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

Obrigado!

    
por jojo 21.08.2015 / 23:49

2 respostas

3

Obtenha 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; tomar emprestado de resposta de PabloG sobre SO :

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

Coloque em RootFolder denominado lastversion.bat (ou qualquer outro). Você pode testar invocando a partir de cmd.exe 1 .

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

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' - Lista todos os arquivos ( *.* ) no diretório, no formato simples ( /B ), classificação ( /O: ) diretório alfabético 3 ( -N ) -primeiro ( G ) 4

DO ECHO %%I & EXIT /B - Imprima o primeiro nome do arquivo e finalize imediatamente ( EXIT ) somente o arquivo em lote ( /B )

Notas de rodapé adicionais

1 @ECHO OFF suprime o eco de comando , mas você provavelmente sabia que já

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 preocupados com qual versão foi realmente escrita para durar e apenas pegar o número de versão mais alto; isso pode não ser desejável

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

    
por 22.08.2015 / 00:48
1

As classificações numéricas "naturais" que reconhecem e classificam números por um valor numérico são um problema 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 script puro utilitário baseado no sistema (híbrido JScript / batch) que é executado nativamente em qualquer máquina Windows do XP em diante.

Para simplesmente obter uma lista classificada:

dir /b /ad RootFolder | jsort /n

Para listar apenas o número de versão mais alto:

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"
    
por 24.08.2015 / 05:53