Перемещение и переименование файлов
Доброго дня всем!
Подсобите пожалуйста BAT'ником. Есть папка с файлами "NaklScan": "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", "2018-01-18_(6).tif", ... ... ... ... ... ... ... "2018-01-18_(7000).tif", ... ... ... ... ... ... ... которая после 3000 файлов начинает долго открываться (т.к. строится список). Нужно чтобы из этой папки (NaklScan) файлы перемещались в другую папку (NaklScan5) - предположим по 100 шт. Но загвоздка в том, что после перемещения файлов: "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", "2018-01-18_(6).tif", ... ... ... ... ... ... ... "2018-01-18_(7000).tif", ... ... ... ... ... ... ... в папку "NaklScan5", в папке "NaklScan" будут снова создаваться файлы с такими же именами. Т.е. нужно чтобы при перемещении в папку "NaklScan5" порядковый номер продолжался: "2018-01-18_(7001).tif", "2018-01-18_(7002).tif", "2018-01-18_(7003).tif", "2018-01-18_(7004).tif", "2018-01-18_(7005).tif", "2018-01-18_(7006).tif". |
Цитата:
|
Цитата:
|
я так понимаю дело выглядит приблизительно так:
- что-то там сканируется в tif - tif распознается - tif переносится в другой каталог для последующей обработки (интересно для какой, хотя к делу это и не относится) как происходит распознавание? учитывая приведенные числа - тоже скриптом, или софт какой-то хитрый который на это нацелен? Если скрипт - дописать Перенос в другой каталог после распознавания. Если софтом - нужно разбираться к чему привязываться (например как определить что файл уже распознан и готов к переносу?) чтобы нумерация была сквозная можно либо искать максимальное по номеру имя в "NaklScan5" и прибавлять к нему 1 (или 2,3,5,7000 - как задумано, в общем), либо еще проще - записывать номер последнего перенесенного файла в, например, текстовик, и при переносе очередного файла - читать и прибавлять опять же столько сколько нужно. Где я не прав? В каком месте нужна помощь? |
Вопрос касается сканирования (не распознавания).
Распознавания не берем в счёт. Т.е. есть программа PaperPort, которая сканирует в один каталог по 3000-7000 изображений в формате *.tiff. Имя: гггг-мм-дд_(#) Когда порог сканирования достигает отметки в 2000, то следующие сканируемые файлы *.tiff начинаются отображаться в программе медленнее (может программа такая, может компьютер слаб - не столь важно) -> влияет на это именно количество файлов в каталоге. Вот и пришла идея, а что если состряпать BAT-ник, который будет таскать *.tif файлы в другой каталог (в который пользователь не заходит - соответственно список не формируется - соответственно компьютер не тормозит и т.п. и т.д.), но таким образом, чтобы все файлы имели порядковый номер: гггг-мм-дд_(порядковый_номер). Вариант: 1. BAT-ник таскает файлы все в одну папку - но не перезаписывает их, а переименовывает, например: гггг-мм-дд_(порядковый_номер)1; гггг-мм-дд_(порядковый_номер)2; гггг-мм-дд_(порядковый_номер)3 ... 2. Оставляя: гггг-мм-дд_ переименовывает порядковый номер в скобках. Итог: гггг-мм-дд_(1); гггг-мм-дд_(2); гггг-мм-дд_(3); гггг-мм-дд_(4); гггг-мм-дд_(5); гггг-мм-дд_(6); ... ... ... |
т.е. нужно просто брать файлы начиная с самого старого в одном каталоге и переместить фиксированное количество файлов (например 1000) в другой каталог. с нумерацией не совсем понятно: например в папке последний файл который был перенесен носит имя "гггг-мм-дд_(1000).tiff" следующие файлы должны продолжить нумерацию ("гггг-мм-дд_(1001).tiff","гггг-мм-дд_(1002).tiff" и т.д.) или как-то по другому?
|
Цитата:
|
Примерно так. numb.txt - файл с номером последнего перенесенного файла
Код:
@echo off |
it3,
я вот одного не пойму - зачем переименовывать файлы, продолжать нумерацию, вы же их просто перемещаете, раскидывайте по одной тысяче, например, как есть да и все: (имею ввиду что для "01-18" конец в нумерации надеюсь бывает и вряд-ли это 1000 000, поэтому в конце дня батничек на запуск - к утру раскидает, а утром уже "01-19" и поехали заново) Код:
@echo off |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Я ведь написал. Цитата:
|
Или же, сделать так:
1. Перемещение файлов без перезаписи (если имя уже такое существует), но не теряя новый файл (например в его имя добавить какой нибудь символ). и 2. Переименовать всё содержимое в папке в: "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", "2018-01-18_(6).tif", ... ... ... ... ... ... ... "2018-01-18_(7000).tif", ... ... ... ... ... ... ... |
it3, цель батника- уменьшить число файлов в папке NaklScan. Откуда берётся исходная нумерация? Каждый день она начинается с 1? Программа сканирования сама определяет исходный номер и продолжает нумерацию сегодняшнего дня? Тогда зачем что-то переименовывать? Пусть батник оставляет в папке NaklScan, например, 1000 последних файлов (или вообще 1 последний, чтобы программа сканирования продолжила нумерацию), а всё остальное перемещает в NaklScan5, причем не в общую кучу, а по подпапкам, для каждого дня своя. Например: NaklScan5\гггг-мм-дд\
|
Цитата:
Цитата:
|
Цитата:
"2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", Оставили: "2018-01-18_(1).tif" Сканируем, создаются новые имена: "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", При перемещении - они не должны заменяться. |
it3, Переместили:
"2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", Оставили: "2018-01-18_(5).tif" Сканируем, создаются новые имена: "2018-01-18_(6).tif", "2018-01-18_(7).tif", "2018-01-18_(8).tif", "2018-01-18_(9).tif", При перемещении - они не будут заменяться, если программа сканирования продолжит нумерацию. И вообще, в любом случае надо не перемещать в другую папку по 1000 файлов, а оставлять в исходной минимальное количество, например 1. |
Цитата:
Протестировал. Если мы переместили: "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", Оставили: "2018-01-18_(5).tif" Сканируем, создаются новые имена: "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif". |
Цитата:
Забираем всё из папки NaklScan в папку NaklScan5, в папке NaklScan5 нумерация сплошная для каждого дня, от более старого к более новому, не вижу смысла что-то оставлять в NaklScan и переписывать оттуда файлы порциями
Код:
@Echo Off |
Цитата:
|
megaloman, огромное спасибо. BAT-ник работает как надо.
Вопрос закрыт. |
Если в сканере можно настроить именование файлов не только днём, но и прибавлять к нему время, типа 2018-01-18_12-15-23.tif - проблемы бы вообще не существовало. Можно было бы переносить в какие угодно подпапки, хоть по часам.
Если этого сделать нельзя, тогда можно файлы переименовывать по дате создания перед копированием, а затем уже рассовывать по папкам. |
DJ Mogarych, it3,
Цитата:
Вот вариант со временем.
Код:
@Echo Off гггг-мм-дд_ччми.tif Если за одну минуту создадутся несколько файлов, то имена будут иметь вид: гггг-мм-дд_ччми.tif гггг-мм-дд_ччми-2.tif гггг-мм-дд_ччми-3.tif и т д. |
Доброго времени суток всем!
Есть необходимость перемещать файлы: "2018-01-18.tif", "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", "2018-01-18_(6).tif", "2018-01-18_(7).tif", "2018-01-18_(8).tif", "2018-01-18_(9).tif", "2018-01-18_(10).tif", "2018-01-18_(11).tif", "2018-01-18_(12).tif", "2018-01-18_(13).tif", "2018-01-18_(14).tif", ... ... ... ... ... ... ... ... ... "2018-01-18_(7000).tif", "2018-01-18_(7001).tif", "2018-01-18_(7002).tif", "2018-01-18_(7003).tif", "2018-01-18_(7004).tif", ... ... ... ... ... ... ... ... ... Но таким образом, чтобы переместились все файлы, кроме последнего. Т.е. эти переместились: "2018-01-18.tif", "2018-01-18_(1).tif", "2018-01-18_(2).tif", "2018-01-18_(3).tif", "2018-01-18_(4).tif", "2018-01-18_(5).tif", "2018-01-18_(6).tif", "2018-01-18_(7).tif", "2018-01-18_(8).tif", "2018-01-18_(9).tif", "2018-01-18_(10).tif", "2018-01-18_(11).tif", "2018-01-18_(12).tif", "2018-01-18_(13).tif", "2018-01-18_(14).tif", ... ... ... ... ... ... ... ... ... "2018-01-18_(7000).tif", "2018-01-18_(7001).tif", "2018-01-18_(7002).tif", "2018-01-18_(7003).tif", А этот остался: "2018-01-18_(7004).tif". Подскажите пожалуйста, как реализовать? |
it3, плохо что у вас имена файлов не структурированы, и при простом анализе файл, например, "2018-01-18_(6).tif", будет идти после файлов с "2018-01-18_(5000).tif" по "2018-01-18_(5999).tif".
|
Цитата:
Так ведь? |
Цитата:
А здесь можно организовать цикл: Проверяем два последовательных файла (причём что это за файлы — всё равно). Если второго файла нет — завершаем работу: задача выполнена. Если есть — сравниваем даты, более старый перемещаем и идём в начало цикла. Впрочем, если переводить текст в скобках в числа — можно делать практически точно так же, сравнивая преобразованные имена. |
it3,
Цитата:
Код:
@Echo Off |
Цитата:
А так, с помощью powershell и ... ну да ладно, пока без лирики: script.ps1 Код:
$src = 'c:\source' |
Вложений: 2
Исправил маску:
Код:
@Echo Off Скриншоты во вложении. |
Цитата:
Скрипт работает. Спасибо. |
it3, Подозреваю, Вы используете тестовую папку, в которую накопировали файлы. И в каком порядке они копировались (создавались при этом) - Вам лучше знать. Как и то, какое время на скриншотах отображено. Попробуйте скрипт с ключом не /T:C (по времени создания) а /T:W (по времени изменения).
Цитата:
Кроме того, останутся все файлы 20??-??-??.tif. Вас это устраивает? |
Цитата:
|
it3, Что Вас не устраивает? Останутся все файлы 20??-??-??.tif? Или что останется единственный нумерованный файл?
it3, Если надо в каждой дате сохранить последний файл (отбор файла по каждой дате по времени последнего изменения) Код:
@Echo Off Код:
@Echo Off |
Время: 08:22. |
Время: 08:22.
© OSzone.net 2001-