3

для структуры папок, как показано ниже

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

Под RootFolder есть коллекция папок, и все они названы с версией строки

с помощью команды Windows Batch, есть ли способ отсортировать их и получить самую большую версию?

Спасибо!

2 ответа2

3

Получить "последнюю" версию из каталога каталогов

Интересный вопрос, так как это пакет Windows! dir твой друг здесь; заимствуя ответ PabloG на SO:

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

Поместите в RootFolder именем lastversion.bat (или что-то еще). Вы можете проверить, вызвав из cmd.exe 1.

Пожалуйста, обратите внимание, что я проверил это только с очень очень ограниченным количеством "версий" каталогов с именами каталогов.

объяснение

FOR /F %%I IN - цикл (FOR) для следующего набора файлов (/F), используя переменную I (%%I) 2

'DIR *.* /B /O:G-N' - Вывести список всех файлов (*.*) В каталоге, в чистом формате (/B), сортировка (/O: :) в обратном алфавитном порядке 3 (-N) каталог-первый (G) 4

DO ECHO %%I & EXIT /B - распечатать первое имя файла и немедленно прекратить (EXIT) только пакетный файл (/B)

Дополнительные сноски

1 @ECHO OFF подавляет эхо-команды, но вы, наверное, уже это знали

2 %%I - использовать два знака процента внутри пакетного файла или, если из интерактивного приглашения, просто %I

«3» в алфавитном порядке означает, что мы не заботимся о том, какая версия была написана до конца, и просто берем самый большой номер версии; это может быть нежелательно

Сначала нужно создать 4 групповых каталога, чтобы простые файлы сортировались до конца и игнорировались

1

"Естественные" числовые сортировки, которые распознают и сортируют числа по числовым значениям, являются настоящей проблемой для Windows. Это может быть сделано, но тот факт, что у вас есть несколько номеров, делает проблему гораздо более громоздкой.

Эта проблема легко решается с помощью JSORT.BAT - утилиты, основанной на чистых сценариях (гибридный JScript/batch), которая изначально работает на любом компьютере с Windows начиная с XP.

Чтобы просто получить отсортированный список:

dir /b /ad RootFolder | jsort /n

Чтобы перечислить только самый высокий номер версии:

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

Чтобы установить переменную с самой высокой версией:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .