Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение и переименование файлов

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение и переименование файлов
it3 it3 вне форума

Пользователь


Сообщения: 94
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго дня всем!
Подсобите пожалуйста 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".

Отправлено: 11:25, 11-01-2018

 
it3 it3 вне форума Автор темы

Пользователь


Сообщения: 94
Благодарности: 0

Профиль | Отправить PM | Цитировать


Или же, сделать так:
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",
... ... ... ... ... ... ...

Отправлено: 07:07, 12-01-2018 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


it3, цель батника- уменьшить число файлов в папке NaklScan. Откуда берётся исходная нумерация? Каждый день она начинается с 1? Программа сканирования сама определяет исходный номер и продолжает нумерацию сегодняшнего дня? Тогда зачем что-то переименовывать? Пусть батник оставляет в папке NaklScan, например, 1000 последних файлов (или вообще 1 последний, чтобы программа сканирования продолжила нумерацию), а всё остальное перемещает в NaklScan5, причем не в общую кучу, а по подпапкам, для каждого дня своя. Например: NaklScan5\гггг-мм-дд\

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-01-2018 в 07:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:28, 12-01-2018 | #12

it3 it3 вне форума Автор темы

Пользователь


Сообщения: 94
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
it3, цель батника- уменьшить число файлов в папке NaklScan. Откуда берётся исходная нумерация? Каждый день она начинается с 1? »
Каждый день она начинается с 1.

Цитата megaloman:
Пусть батник оставляет в папке NaklScan, например, 1000 последних файлов, а всё остальное перемещает в NaklScan5, причем не в общую кучу, а по подпапкам, для каждого дня своя. Например: NaklScan5\гггг-мм-дд\ »
Задача: Все файлы должны находиться в одном каталоге, без подкаталогов.

Последний раз редактировалось it3, 12-01-2018 в 08:41.


Отправлено: 07:35, 12-01-2018 | #13

it3 it3 вне форума Автор темы

Пользователь


Сообщения: 94
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Оставляем 1 файл в папке NaklScan, чтобы программа сканирования могла продолжить нумерацию, а всеостальные перемещаем в 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",

При перемещении - они не должны заменяться.

Отправлено: 07:45, 12-01-2018 | #14


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 07:50, 12-01-2018 | #15

it3 it3 вне форума Автор темы

Пользователь


Сообщения: 94
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
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".

Отправлено: 08:05, 12-01-2018 | #16


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата it3:
Оставили:
"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
cls

Set "BoxIn=Z:\Box_In\NaklScan"
Set "BoxOut=Z:\Box_In\NaklScan5"
Set "Mask=20??-??-??_(*).tif"

If Not Exist "%BoxOut%" Md "%BoxOut%"

SetLocal EnableExtensions EnableDelayedExpansion

Set "TDate="
FOR /F "usebackq tokens=1,2* delims=()" %%i IN (`2^>nul Dir "%BoxIn%\%Mask%" /A:-D /B /O:D /T:C`) DO (
	If Not "!TDate!"=="%%i" (
		Set "TDate=%%i"
		Call :LastNum "%%i" "%%k" "N"
	)
	Set /A N+=1
	>nul Move "%BoxIn%\%%i(%%j)%%k" "%BoxOut%\%%i(!N!)%%k"
)
GoTo :Eof

:LastNum
	Set /A %~3=0
	FOR /F "usebackq tokens=2 delims=()" %%n IN (`2^>nul Dir "%BoxOut%\%~1(*)%~2" /A:-D /B /O:-D /T:C`) DO Set /A %~3=%%n &GoTo :Eof
GoTo :Eof
Пропишите свои пути в начале скрипта!
Всё же задумался бы насчет того, чтобы файлы забрасывались не в общую кучу, а рассовывались по папкам за день. Иметь мильён файлов в одной папке не фэншуйно.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-01-2018 в 10:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:06, 12-01-2018 | #17


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата it3:
Оставили:
"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". »
Я всё ждал, когда сей факт внезапно всплывёт в процессе реализации хотелки порциями.

Отправлено: 11:08, 12-01-2018 | #18

it3 it3 вне форума Автор темы

Пользователь


Сообщения: 94
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, огромное спасибо. BAT-ник работает как надо.
Вопрос закрыт.

Отправлено: 11:09, 12-01-2018 | #19


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Если в сканере можно настроить именование файлов не только днём, но и прибавлять к нему время, типа 2018-01-18_12-15-23.tif - проблемы бы вообще не существовало. Можно было бы переносить в какие угодно подпапки, хоть по часам.

Если этого сделать нельзя, тогда можно файлы переименовывать по дате создания перед копированием, а затем уже рассовывать по папкам.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:02, 12-01-2018 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение и переименование файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименование/перемещение файла через drag&drop. VoyS Скриптовые языки администрирования Windows 3 17-06-2016 21:45
CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла kirillius Скриптовые языки администрирования Windows 7 13-05-2016 12:57
CMD/BAT - переименование группы файлов с запросом начального номера и перемещение kozikozi Скриптовые языки администрирования Windows 19 29-07-2014 19:31
CMD/BAT - [решено] Скрипт перемещение+переименование файла Pyrocar Скриптовые языки администрирования Windows 2 30-08-2010 14:25




 
Переход