2015-01-21 4 views
0

У меня есть список файлов .sql названные версииСортировка по имени в пакетном файле

EG:
5.1.9.5.sql
5.2.1.5.sql
5.5.1.7.sql
5,10 .6.2.sql

Но когда цикл над ними с помощью:

for %%i in (*.sql) do (
    echo %%i 
) 

Они вышли в следующем порядке:
5.1.9.5.sql
5.10.6.2.sql
5.2.1.5.sql
5.5.1.7.sql

Есть ли способ, чтобы заставить их выйти в порядке, указанном первым, который, как файловая система Windows? Без переименования всех файлов.

+0

Первый заказ явно не является «правильным» заказом - лексически 5.10 меньше 5.2. – Arvo

+0

Отправил вопрос, чтобы отразить это. – Martin

ответ

1

Мне удалось разобраться с проблемой, отсортировав файлы по дате создания.

for /f %%i in ('dir /b /o:d *.sql') do (
    echo %%i 
) 
+0

Работает только потому, что ваши выпуски с интересом увеличивают число в обычном порядке. Это сломалось бы, если бы у вас был релиз обслуживания более ранней версии (скажем 4.8.5.3.sql), появившейся после следующей основной версии. – Magoo

0

Если вы когда-нибудь окажетесь в положении, когда ни один файл дату создания файла, ни дата последнего изменения помощи, то вы можете использовать мой JSORT.BAT utility. Это гибридный JScript/пакетный скрипт, который имеет параметр/N, который сортирует числа численно, а не лексически. Утилита - это чистый скрипт, который запускается изначально на любом компьютере Windows с XP.

for /f %%F in ('dir /b /a-d *.sql^|jsort /n') do (
    echo %%F 
) 
Смежные вопросы