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

Компьютерный форум 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

 

Ветеран


Contributor


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

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


DJ Mogarych, it3,
Цитата DJ Mogarych:
тогда можно файлы переименовывать по дате создания перед копированием »
Файлы изначально именуются с датой создания как гггг-мм-дд_(хххх).tif, тут уже не за чем напрягаться. Что касается времени создания, Я рассматривал этот вариант, но, увы, в CMD выдернуть время создания файла хотя бы с секундами я не умею, а делать какой-нибудь костыль - при большом количестве файлов это резко замедлит работу.
Вот вариант со временем.
Код: Выделить весь код
@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%"

FOR /F "usebackq tokens=1,2* delims=()" %%i IN (`2^>nul Dir "%BoxIn%\%Mask%" /A:-D /B /O:D /T:C`) DO Call :Transfer "%%i" "%%k" "%BoxIn%\%%i(%%j)%%k"

Pause
GoTo :Eof

:Transfer
	Set "Ftime=%~t3"
	Set "Ftime=%Ftime:~-5%"
	Set "Ftime=%Ftime::=%"
	Set "Ftime=%Ftime: =0%"
	Set /A ND=1
	Set "NewFile=%BoxOut%\%~1%Ftime%%~2"
	:Begin
		If Not Exist "%NewFile%" (
			Move %3 "%NewFile%" >nul 
			GoTo :Eof
		)
		Set /A ND+=1
		Set "NewFile=%BoxOut%\%~1%Ftime%-%ND%%~2"
	GoTo :Begin
GoTo :Eof
Формат имен перемещенных файлов при этом
гггг-мм-дд_ччми.tif
Если за одну минуту создадутся несколько файлов, то имена будут иметь вид:
гггг-мм-дд_ччми.tif
гггг-мм-дд_ччми-2.tif
гггг-мм-дд_ччми-3.tif и т д.

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


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



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

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

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

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


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

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


Доброго времени суток всем!
Есть необходимость перемещать файлы:

"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".

Подскажите пожалуйста, как реализовать?

Отправлено: 07:47, 09-06-2018 | #22

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


it3, плохо что у вас имена файлов не структурированы, и при простом анализе файл, например, "2018-01-18_(6).tif", будет идти после файлов с "2018-01-18_(5000).tif" по "2018-01-18_(5999).tif".

-------
Mikhail Zhilin


Отправлено: 10:16, 09-06-2018 | #23

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

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


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

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


Цитата mwz:
it3, плохо что у вас имена файлов не структурированы, и при простом анализе файл, например, "2018-01-18_(6).tif", будет идти после файлов с "2018-01-18_(5000).tif" по "2018-01-18_(5999).tif". »
Можно ведь переносить по времени создания. Т.е. нужно проанализировать содержимое папки и перенести наиболее ранние файлы, а более поздние оставить.
Так ведь?

Отправлено: 10:41, 09-06-2018 | #24

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата it3:
Можно ведь переносить по времени создания »
Можно и так — и будет быстрее; поскольку хоть и можно организовать перевод величин в скобках из текстового в числовое представление — дальнейший анализ всё равно будет сложнее.

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

Впрочем, если переводить текст в скобках в числа — можно делать практически точно так же, сравнивая преобразованные имена.

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 09-06-2018 в 11:03.


Отправлено: 10:54, 09-06-2018 | #25


Ветеран


Contributor


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

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


it3,
Цитата it3:
Можно ведь переносить по времени создания. »
Проще пареной репы
Код: Выделить весь код
@Echo Off

Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Set "Mask=2018-01-18*.tif" 

FOR /F "usebackq skip=1 delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:C`) DO >nul Move "%BoxIn%\%%f" "%BoxOut%\"

GoTo :Eof
Но подозреваю, начнётся уточнение и развитие постановки, и код надо будет пересаживать и выращивать.

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

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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата it3:
Подскажите пожалуйста, как реализовать? »
Вопрос в том, как происходит отбор файлов. В смысле в каталоге присутствуют ещё *.tif, кроме перечисленных?
А так, с помощью powershell и ... ну да ладно, пока без лирики:
script.ps1
Код: Выделить весь код
$src = 'c:\source'
$dst = 'c:\destination'
dir "$src\*" -inc "*.tif" -file|sort -prop @{
	Expression={[int]($_.name -split "\(|\)")[1]}
} -desc|select -skip 1|%{mi $_.fullname $dst}

-------
scio me nihil scire. Ѫ

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

Отправлено: 11:35, 09-06-2018 | #27

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

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


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

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


Изображения
Тип файла: png tif_1.png
(38.9 Kb, 4 просмотров)
Тип файла: png tif_2.png
(18.6 Kb, 3 просмотров)

Исправил маску:
Код: Выделить весь код
@Echo Off

Set "BoxIn=c:\Temp\Archive\"
Set "BoxOut=c:\Temp\Archive\1\"
Set "Mask=20??-??-??_(*).tif"

FOR /F "usebackq skip=1 delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:C`) DO >nul Move "%BoxIn%\%%f" "%BoxOut%\"

GoTo :Eof
Но этот скрипт оставляет в папке "c:\Temp\Archive\" один файл, который был создан раньше всех, а должно быть наоборот. Должен оставаться файл, который был создан позже всех.
Скриншоты во вложении.

Отправлено: 11:52, 09-06-2018 | #28

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

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


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

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


Цитата YuS_2:
Вопрос в том, как происходит отбор файлов. В смысле в каталоге присутствуют ещё *.tif, кроме перечисленных?
»
Нет.
Скрипт работает. Спасибо.

Отправлено: 11:55, 09-06-2018 | #29


Ветеран


Contributor


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

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


it3, Подозреваю, Вы используете тестовую папку, в которую накопировали файлы. И в каком порядке они копировались (создавались при этом) - Вам лучше знать. Как и то, какое время на скриншотах отображено. Попробуйте скрипт с ключом не /T:C (по времени создания) а /T:W (по времени изменения).
Цитата it3:
Set "Mask=20??-??-??_(*).tif" »
При наличии в папке данных за много дней останется единственный самый последний файл за самый последний день.
Кроме того, останутся все файлы 20??-??-??.tif. Вас это устраивает?

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


Последний раз редактировалось megaloman, 09-06-2018 в 12:44.


Отправлено: 12:34, 09-06-2018 | #30



Компьютерный форум 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




 
Переход