![]() |
Проверка последовательности в файлах.
Здравствуйте! Есть такая задача:
В некой папке есть файлы. Имена файлов - порядковый набор цифр. Расширение - буква и две цифры. Нужно проверить, идут ли файлы подряд или некоторых не хватает. Например: 12345001.В12 12345002.В12 12345004.В12 Не хватает 12345003.В12 Вторая беда в том, что расширения могут быть разными, соответственно номера файлов могут повторяться. Например: 12345001.В10 12345001.В12 12345002.В10 12345002.В12 12345003.В10 12345004.В10 12345004.В12 Всё ещё не хватает 12345003.В12 В принципе, можно руками вводить номер, с которого начинать проверять и расширение. Но я всё равно не знаю, как проверить, что оно идёт попорядку. Зарание благодарен за любую помощь! |
subuday77, приведите пример имён реальных файлов: важно увидеть длину и выделить постоянную часть.
|
|
Iska, Оно так и выглядит. Первые 5 цифр номер лицензии, 3 цифры - номер архива, расширение показывает, с какого сервера файл. Собственно в одном массиве первые 5 цифр чаще всего одинаковыми, кроме случаев, когда на одной машине работают несколько клиентов. Но длина имени всегда 5+3 . 3
kiripanda, спасибо, но не вариант. Проверка выпоняется на машинах клиентов. |
subuday77, для двух расширений файлов:
Код:
@ECHO OFF |
Цитата:
Можно, например, перетаскивать какой-либо файл (из набора потребных для проверки) на пакетный файл, а пакетный файл по переданному имени уже сам будет определять папку, постоянную часть имени и расширение, иначе — запрашивать то. другое и третье в диалоге: |
subuday77, вот простой и почти универсальный вариант:
Код:
@ECHO OFF |
Iska, Georgio, спасибо! В воскресенье выйду на работу, буду пробовать.
|
Цитата:
-имена файлов 5+3, где 5 знаков префикс, 3 знака номер, -для каждого префикса могут быть свой набор расширений, -начало и конец нумерации для каждого префикса может быть своя, Код:
@Echo Off Если нумерация в имени обязательно должна начинаться с 001, хотя, в принципе, в этом случае батник можно упростить |
Мой вариант
Код:
@echo off |
Спасибо всем, кто уже принял участие в этом проекте. К сожалению, всё, что мы попробовали до сих пор, "немножко не то"... Честно признаюсь, у меня не хватает мозгов, чтобы состряпать что-то путное, даже опираясь на предложенные вами коды. По-этому, я попытаюсь максимально подробно описать, что именно нужно.
1. Выбор директории. Способ не важен. Drug & Drop, предложенный Iska, это хорошо, но не критично. 2. Список расширений. В папке следует проверить, какие расширения присутствуют. Они всегда будут иметь следующий вид: H01 H02 H03 и и.д. Последний - H34, но возможен дальнейший рост, так что, если прописывать жёстско, то стоит дойти до H50. 3. Проверка файлов. Для каждого расширения следует проверить, какой номер файла является максимальным. Имя файла состоит из двух частей. XXXXXYYY.HZZ, где XXXXX - номер лицензии, YYY - номер файла, а HZZ - расширение(указывает, с какого сервера файл). Тут можно запросить ввести номер лицензии вручную. Найдя максимальный номер для первого расширения, следует проверить наличие файлов, начиная с XXXXX001 и до максимального. Затем следует перейти к следующему расширению и повторить процедуру. (Без повторного запроса номера лицензии). 4. Отображение результатов. Результаты хотелось бы в текстовой файл, в котором бы было указанно: Номер лицензии Список расширений Если порядок не нарушен - расширение, первый и последний файлы и отметка, что всё в порядке. Если порядок нарушен - расширение, первый и последний файлы и список недостающих файлов. Как-то так. Если кто-то такое напишет - будем очень благодарны! Зарание спасибо за любую помощь! |
subuday77, учитесь сразу излагать условия ТЗ полностью.
Цитата:
|
subuday77,
Код:
@echo off |
Цитата:
|
Цитата:
Код:
pushd C:\Windows || echo bad & exit |
Тогда так:
Код:
pushd "%dir%" || (echo Wrong Path & goto:eof) Код:
pushd "%dir%" || ( |
Iska,
Цитата:
12345001.Н10 12345001.Н12 12345002.Н10 12345002.Н12 12345003.Н10 12345004.Н10 12345004.Н12 Не хватает 12345003.В12 Соответственно, результат дожен быть примерно такой: Н10 12345001-12345004 No missing files H12 12345001-12345004 12345003 is missing |
subuday77, хоть убейте, никак не могу понять, как в наборе:
Код:
12345001.Н10 |
Iska, опечатка! Простите.
Foreigner, похоже, работает! Спасибо огромное! Переходим к полевым испытаниям. |
Время: 12:35. |
Время: 12:35.
© OSzone.net 2001-