Войти

Показать полную графическую версию : [решено] Переименование и копирование файлов


Страниц : 1 2 [3] 4 5

megaloman
20-08-2018, 18:50
Лучше дождаться развернутых условий... »Если долго сидеть на берегу реки, можно дождаться, как мимо тебя проплывёт труп врага. Правда, твоей жизни может на это и не хватить

jordan_74
21-08-2018, 11:07
megaloman,
Вам надо сохранять исходную нумерацию или можно перенумеровать все файлы по возрастанию времени создания ? »
По возрастанию времени создания не получится я полагаю, всем файлам проставляется одинаковое время - время распаковки архива.

Постараюсь описать подробно:

Файлы чеков я забираю из архива, в котором они пронумерованы условно от check1 до check100. Я кладу архив в папку "1" и распаковываю.
Если в папке распаковать более одного архива, тогда при совпадении имен к имени файлов второго архива добавляется суффикс "_1" например check1_1
Если ещё архив, соответственно будет имя check1_2 и т.д, имя файла корректируется в зависимости от кол-ва архивов. Все это самостоятельно делает 7-Z архиватор.

Поэтому прошу прощения) ввел в заблуждение, суффикса "копия" не будет...

Именно в этом и сложность, как их пронумеровать по порядку..?

jordan_74
21-08-2018, 11:59
Iska,
Цитата когда-то популярная песня:
закрывала уши я, я её не слушала, ой, мама, моя мамочка, как ты была права! »

Откровенно говоря это трындец)), даже просто логику переименования представить не могу, не говоря уже о синтаксисе и написания батника...(

YuS_2
21-08-2018, 12:14
Если долго сидеть на берегу реки, можно дождаться »
Кстати, это немного не о том... смысл сих фраз не надо понимать буквально...
Если сказать их по-русски, то получится: всему свое время, но не упусти момент... т.е. это об умении выжидать наиболее подходящий момент для чего-либо.
И он ещё пока, судя по всему, не наступил... :)

даже просто логику переименования представить не могу »
если не получается представить логику...
Как уже говорил выше, опишите все возможные варианты входящих данных и то, что из них требуется получить в итоге...
Содержимое файлов имеет отношение к нумерации и вообще нумерация имеет какое-либо значение? Т.е. если просто взять и откинуть все существующие цифры в конце имени файла и перенумеровать их заново - устроит такое решение?
А ещё можно перенумеровать их по дате изменения файла, которая сохраняется даже после извлечения из архива...
В общем, соберитесь с духом и попробуйте таки сформулировать саму задачу (о батниках и синтаксисе голову не ломайте, это только запутает). :)

Iska
21-08-2018, 12:28
Постараюсь описать подробно: »
Не прошло и полугода пяти страниц темы, как мы добрались таки до того, с чего следовало начинать — до постановки задачи, а не попыток как-нибудь выбить реализацию уже выбранного решения. Браво!

при совпадении имен к имени файлов второго архива добавляется суффикс "_1" например check1_1
Если ещё архив, соответственно будет имя check1_2 и т.д, имя файла корректируется в зависимости от кол-ва архивов. Все это самостоятельно делает 7-Z архиватор. »
«Зачем Ви тѓ́авите:
https://i.imgur.com/cdMcR4v.png?!» Не делает он ничего такого «самостоятельно». Пока Вы не нажмёте в диалоге подтверждения кнопку «Переименовать автоматически» — не делает.

jordan_74
21-08-2018, 12:53
YuS_2,
Ну что же, поехали!!!

Есть некое кол-во архивов с файлами, которые в каждом архиве пронумерованы от check1 до условно check100.
Есть папка 1 и 2 , куда архивы и кладутся. Файлов в папка должно быть менее 1000, тоесть 999
Также есть папка Total
Содержимое файлов никакого отношения к нумерации не имеет.

Нужно:
1)Распаковать архив(ы) в папках 1 и 2, после чего файл архива удалить.
2)Переименовать файлы с именами от check001 до check999 при этом добавить к имени значение названия папки 1 или 2 :
А именно от check001_1 до check999_1 и соответственно check001_2 до check999_2
3)Скопировать переименованные файлы в папку "Total"

А ещё можно перенумеровать их по дате изменения файла, которая сохраняется даже после извлечения из архива... »
Пробовал распаковывать, время для всех файлов ставится одинаковое. Если получится сделать так, то это будет самое верное решение.

?!» Не делает он ничего такого «самостоятельно». Пока Вы не нажмёте в диалоге подтверждения кнопку «Переименовать автоматически» — не делает. »
Согласен

megaloman
21-08-2018, 13:24
Пока Вы не нажмёте в диалоге подтверждения кнопку «Переименовать автоматически» — не делает » Если файлы check1 и check1_1 совершенно одинаковые, нефиг их плодить. Другое дело, если check1 - это совпадающие имена разных файлов. Откровенно говоря это трындец)), »Найдите того, кто придумал имена папок 1 и 2 и душите его, душите :).
Допустим, есть исходные файлы check123 и check123_1
Как отличить: check123_1 от переименованного check123 + имя папки _1 ?
Или папки называйте, например, A и B, D1 и D2, 1111 и 2222(лучше не надо), то есть, чтобы от номеров в файле отличались.
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "Folds="A" "B""
Set "Pref=check"
Set /A Suff=10
Set /A Max=1000

Set "BoxOut=Z:\Box_In\Total"
If Not Exist "%BoxOut%" Md "%BoxOut%"

Set /A Max1=%Max%-1
FOR /L %%n IN (1,1,%Max1%) DO FOR %%d IN (%Folds%) DO (
Set /A MMax=%Max%+%%n
FOR %%f IN ("%BoxIn%\%%~d\%Pref%%%n.*") Do (
rem echo %%f
Call Copy "%%f" "%BoxOut%\%Pref%%%MMax:~1%%_%%~d%%~xf" >nul
Call Ren "%%f" "%Pref%%%MMax:~1%%_%%~d%%~xf" >nul
)

FOR /L %%m IN (1,1,%Suff%) Do FOR %%f IN ("%BoxIn%\%%~d\%Pref%%%n_%%m.*") Do (
rem echo %%f
Call Copy "%%f" "%BoxOut%\%Pref%%%MMax:~1%%_%%m_%%~d%%~xf" >nul
Call Ren "%%f" "%Pref%%%MMax:~1%%_%%m_%%~d%%~xf" >nul
)
)
Pause
GoTo :Eof
Здесь Suff=10 - максимальный рассматриваемый номер версии файла. Можно поставить любой другой. Чем он больше, тем дольше будет выполняться скрипт Кстати, это немного не о том... смысл сих фраз не надо понимать буквально...
Если сказать их по-русски, то получится: всему свое время »Позвольте Вам не позволить! Скорее по русски: Под лежачий камень вода не течет. Или: Вода камень точит. Мне более по нраву тезис: Дорогу осилит идущий. А созерцательное сидение на берегу реки не катит. На реку, огонь и работающего человека можно смотреть бесконечно (и безрезультатно)

YuS_2
21-08-2018, 14:04
Позвольте Вам не позволить! »
Да как Вам будет угодно! :)
Вообще, истина - она одна, а вот правда у каждого своя.
Трактовкой древних мудростей, можно высказать только чисто субъективное мнение, а вот истинное значение, могло быть доступно только сочинителю... но, увы, спросить его о нем, уже невозможно.

jordan_74
21-08-2018, 14:23
megaloman,
Это то, что нужно!

jordan_74
21-08-2018, 14:33
megaloman,

И ещё просьба, можно модифицировать, чтобы избежать этих подчеркиваний???
К имени файла вместо _1 , _2 и т.д добавить часть имени архива!? А именно часть номера счета
Наименование архива выглядит следующим образом "Расчетный счет 40702810816540044924.zip"
В имени архива 407028 остается неизменным, а остальная часть меняется в зависимости от номера счета.

Можно к имени добавить оставшуюся часть номера счета ,в данном случае "10816540044924" чтобы в итоге получить например check007_10816540044924_A ???

Iska
21-08-2018, 14:44
jordan_74, Вы опять описываете выбранное Вами решение, а не задачу.
Есть некое кол-во архивов с файлами, которые в каждом архиве пронумерованы от check1 до условно check100. »
1. Некое количество — какое именно? Сколько их может быть? В каких пределах может изменяться? От чего это зависит? Каковы имена архивов?
2. Имена файлов всегда ли check? Нумерация всегда ли с 1? Не может ли быть пропусков в нумерации?
3. Одноимённые файлы в разных архивах одинаковы или нет?

Есть папка 1 и 2 , куда архивы и кладутся. »
1. Почему папки именуются именно 1 и 2?
2. Почему папки 1 и 2, а архивов — некое количество?
3. Как именно распределяется некое количество архивов по папкам 1 и 2, и почему именно так распределяются, а не как-то иначе?
4. Почему вообще нужно распределять архивы по папкам?
И это вопросы, возникающие только по первым двум (!) предложениям.

А созерцательное сидение на берегу реки не катит. На реку, огонь и работающего человека можно смотреть бесконечно (и безрезультатно) »
Да ну :). Я очень созерцательно тут сидел и результативно наблюдал. И у меня получилось :)!

megaloman, Это то, что нужно! »
Так там ещё и не check1, а check1.xls/check1.xlsx :lol:.

jordan_74
21-08-2018, 15:00
1. Некое количество — какое именно? Сколько их может быть? В каких пределах может изменяться? От чего это зависит? Каковы имена архивов?
2. Имена файлов всегда ли check? Нумерация всегда ли с 1? Не может ли быть пропусков в нумерации?
3. Одноимённые файлы в разных архивах одинаковы или нет? »

1) Архивов может быть не более 20. Зависит от кол-ва используемых для оплаты счетов. Имя архива "Расчетный счет 40702810816540044924 от 17082018" в котором часть номера счета, а именно 407028 остается неизменной. Счетов может быть в пределах десятка
2)Имя файла должно начинаться с check. нумерация должна быть с 001. Пропусков нумерации быть не должно.
3)Одноимённые файлы в разных архивах различны по содержанию. Содержание никак не привязано к нумерации.

1. Почему папки именуются именно 1 и 2?
2. Почему папки 1 и 2, а архивов — некое количество?
3. Как именно распределяется некое количество архивов по папкам 1 и 2, и почему именно так распределяются, а не как-то иначе?
4. Почему вообще нужно распределять архивы по папкам? »

Имена папок названы произвольно. Существует 2 источника получения чеков, поэтому то и 2 папки.

все это нужно, чтобы в процессе печати можно было всегда отследить из какого архива был чек, и если он ошибочный, то быстро найти его в исходном архиве. Вобщем вся информация в имени чека нужна для возможности анализа.

megaloman
21-08-2018, 18:41
Имя архива "Расчетный счет 40702810816540044924 от 17082018"
Счетов может быть в пределах десятка
Одноимённые файлы в разных архивах различны по содержанию
Существует 2 источника получения чеков, поэтому то и 2 папки»Вперёд на баррикады!
1. В папке A и B чеки разных счетов или счета в этих папках могут совпадать?
2. Вы распаковали архив, допустим, с именем Расчетный счет 40702810816540044924 от 16082018 в папку A. Получили файлы check1,2,3 .... Переименовали их в check001_10816540044924_A, 002, 003, 004 и т д. Скопировали в Total. Что с ними далее?
Следующий шаг: Вы распаковали архив, допустим, с именем Расчетный счет 40702810816540044924 от 17082018 в папку A. Опять получили файлы check1,2,3 .... ??? Что с ними делать, у Вас уже есть файлы check001_10816540044924_A, 002, 003, 004 и т д. Приплыли? Что далее?
3. Зачем вообще эта катавасия? Зачем распаковываются архивы? Не лучше ли файлы после каждой распаковки именовать
10816540044924_20180817_001_A, 002, 003 ...
10816540044924_20180818_001_A, 002, 003 ...
или
20180817_10816540044924_001_A, 002, 003 ...
20180818_10816540044924_001_A, 002, 003 ...
в зависимости от того, что при сортировке предпочтительнее.
А слово check вааще не нужно ...
4. Зачем иметь одинаковые файлы в A, B и Total

Идея такая: батник берёт последовательно архивы, распаковывает в папку (кстати, а где признак того, что архив должен распаковывается в папку A или B?), переименовывает/копирует с именами, связанными с архивом.
Нужно четкое описание, зачем это нужно и последовательность действий.

YuS_2
21-08-2018, 21:53
2)Имя файла должно начинаться с check. нумерация должна быть с 001. Пропусков нумерации быть не должно. »
Как выше правильно подметили, все равно, однозначной идентификации в общей куче не получается.
1. Что будет сбрасывать счетчик?
а) Поступление новых архивов
б) Переполнение счетчика
в) Наступление определенной даты
2. Как часто поступают архивы? Возможна ли ситуация, что в один день поступает несколько архивов с одинаковым номером счета?
3. Нумерация имеет значение в пределах одного архива или необходима перенумерация всех распакованных файлов под один счетчик?

Iska
21-08-2018, 22:24
Коллеги! Добьём тему до десяти страниц, а ;)? Как думаете?

YuS_2
21-08-2018, 22:36
Как думаете? »
что нам стоит дом построить?
нарисуем - будем жить.
:yes:

Busla
22-08-2018, 10:36
2)Имя файла должно начинаться с check. нумерация должна быть с 001. Пропусков нумерации быть не должно. »
вы всё в одну кучу мешаете

напишите отдельно:
1) что получаете на входе
2) какой результат должен быть

сейчас совершенно непонятно, что вы написали: то ли что входные данные гарантированно не имеют разрывов в нумерации; то ли что имеют и надо перенумеровывать

jordan_74
22-08-2018, 11:18
А слово check вааще не нужно ... »
Программа чекопечати подтягивает файл на печать только в том случае, если его имя начинается на check

Не лучше ли файлы после каждой распаковки именовать
10816540044924_20180817_001_A, 002, 003 ...
10816540044924_20180818_001_A, 002, 003 ...
или
20180817_10816540044924_001_A, 002, 003 ...
20180818_10816540044924_001_A, 002, 003 ... »
Это отличный вариант, но имя файла все равно должно начинаться на check

В папке A и B чеки разных счетов или счета в этих папках могут совпадать? »
A и B это разные источники получения чеков. в этих папках чеки разных счетов и не совпадают.

Скопировали в Total. Что с ними далее? »
Далее я копирую файлы на ресурс печати чеков.

Зачем иметь одинаковые файлы в A, B и Total »
Вы правы, по идее после того, как файлы скопировались в Total, папки А и В нужно очищать

Последовательность действий:

Есть 2 папки А и В и итоговая Total
Ежедневно я кладу в каждую из них архивы с файлами чеков с текущей датой. И печатать я буду только чеки полученные за текущую дату.
Архивы в папках распаковываются, переименовываются файлы c указанием номера счета и даты, условно в check001_10816540044924_20180817_A и т.д
После, файлы чеков из папок А и В копируются в Total, после чего папки A и B очищаются. Папка Total очищается мной вручную, я переношу файлы на ресурс печати
Каждый новый день нумерация файлов начинается с 001

jordan_74
22-08-2018, 11:59
напишите отдельно:
1) что получаете на входе
2) какой результат должен быть »

Есть файл check1, check2, check3
на выходе check001_10816540044924_20180817_A

YuS_2
22-08-2018, 12:17
сейчас совершенно непонятно »
Не то, чтобы совершенно, а скорее разрозненно и запутанно.
в каждом архиве пронумерованы от check1 до условно check100. »
Файлов в папка должно быть менее 1000, тоесть 999 »
Содержимое файлов никакого отношения к нумерации не имеет. »
отсюда следует:
уникальная нумерация требуется в исходных папках, условно "A" и "B", без учета находящихся там же архивов (хотя местоположение архивов не указано вроде...).
далее:
Распаковать архив(ы) в папках 1 и 2, после чего файл архива удалить. »
Переименовать файлы с именами от check001 до check999 при этом добавить к имени значение названия папки »
Имя архива "Расчетный счет 40702810816540044924 от 17082018" в котором часть номера счета, а именно 407028 остается неизменной. Счетов может быть в пределах десятка »
К имени файла вместо _1 , _2 и т.д добавить часть имени архива!? А именно часть номера счета »
казалось бы вместо имени папки номер счета, но:
Можно к имени добавить оставшуюся часть номера счета ,в данном случае "10816540044924" чтобы в итоге получить например check007_10816540044924_A ??? »
ну да ладно - это мелочь...
Имя файла должно начинаться с check. нумерация должна быть с 001. Пропусков нумерации быть не должно. »
все это нужно, чтобы в процессе печати можно было всегда отследить из какого архива был чек, и если он ошибочный, то быстро найти его в исходном архиве. Вобщем вся информация в имени чека нужна для возможности анализа. »
исходя из вышеизложенного, остался невыясненными вопросы:
1. Переименование файлов осуществляется на регулярной основе? Если на регулярной, то:
2. Перед запуском переименования, необходимо освобождать исходные и целевую папки от распакованных файлов. Они будут удаляться или перемещаться? Если перемещаться, то куда? Это должен делать разрабатываемый скрипт или какой-либо другой инструмент (возможно вручную?)?
3. С какой частотой поступают архивы с чеками? Они появляются автоматически или вручную? Если автоматически, то возможна ли ситуация появления архива в процессе переименования?




© OSzone.net 2001-2012