Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29

Использование даты создания файла как переменную, переименование с нумерацией

15.02.2021, 23:45. Показов 6563. Ответов 26

Студворк — интернет-сервис помощи студентам
Всем привет! Пишу bat, дабы упростить копирование и сортировку видео и фото с камеры на компьютер.
Опишу как это выглядит:
Есть папка "DCIM", в которой создаются папки типа "100MSDCF", "101MSDCF", причем их может быть неограниченное количество (не знаю по какому принципу они делятся, не важно), в этих каталогах хранятся все фотографии с камеры, причем имена файлов не обязательно начинаются по порядку с какого-то определенного типа "DSC00001.ARW", а наоборот, могут начинаться хоть с "DSC00238.ARW", хоть с "DSC00426.ARW". У каждого из этих фото есть своя дата создания, в основном одна и та же, но проблема как раз в том, что она может отличаться. Мне же нужно, чтобы при запуске Drop.bat создавалась папка с датой, например "21.02.16" и туда копировались те фотографии, которые были созданы в этот день, причем из всех папок, будь то "100MSDCF" или "101MSDCF". А фотографии, созданные, например "21.02.13" копировались в папку под названием "21.02.13". Усложняет ситуацию еще тот факт, что фото могут называться одинаково, но быть в разных папках, при этом с одной датой. Например в папке "100MSDCF" есть фото "DSC00005.ARW", при этом в папке "101MSDCF" так же есть файл "DSC00005.ARW", оба файла имеют одну дату, но сами фотографии разные. Так что, нужно чтобы у фотографий еще и менялось имя на порядковый номер в итоговой папке.
Еще, нужно тоже самое, но для видео. Но, конечно, если вы мне поможете с тем, что я написал выше, с видео я уже накидаю сам, по тому же принципу)
Пока, все очень плохо, совсем не так, как хотелось бы, и через "костыли", вот всё, что я смог сделать...
Заранее огромное спасибо! Если нужны какие-нибудь иллюстрации или описание, обязательно предоставлю!

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo @off
for /f %%a in ('wmic path win32_LocalTime Get Day^,Month^,Year /value') do >nul set "%%a"
set Month=00%Month%
set Month=%Month:~-2%
set Day=00%Day%
set Day=%Day:~-2%
set Year=00%Year%
set Year=%Year:~-2%
set datetemp=%Year%.%Month%.%Day%
 
if exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%" MD "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%\TEMP"
if exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%" xcopy "D:\DCIM" "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%\TEMP" /s /e
 
if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%" MD "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%"
if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%\TEMP" xcopy "D:\DCIM" "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\%datetemp%" /s /e
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2021, 23:45
Ответы с готовыми решениями:

Распределение по папкам и переименование JPG-файлов на основе даты их создания или модификации
В папке много .jpg файлов, хочется организовать их исходя из Даты Создания (Модификации) в свойствах файла. Во первых, для каждой даты...

Переименование файла после создания
Здравствуйте. Помогите разобраться? Не могу понять где не правильно, мне нужно объединить видео с аудио и записать в mp4. Все это...

Изменение времени создания файла на минус Х дней от текущей даты создания
День добрый, ветераны форума. Помогите пожалуйста следующую задачу: Есть папка в ней вложеные папки и файлы (более 20к штук),...

26
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 00:02
dhpro100, вечер добрый! При запуске скрипта Вы хотите единоразово задать дату, по которой будет вестись отбор фотографий или нужно дёргать дату создания у каждой фотографии и агрегировать их в соответствии с ней?

Добавлено через 6 минут
Так же уточните... При копировании файла в каталог необходимо, чтобы его имя было в виде числа в соответствии с его порядковым номером в каталоге, то есть 1.jpg, 2.jpg, 3.jpg, n.jpg?
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 00:04  [ТС]
Да, для каждого файла, чтобы все фото с одной датой - в одну папку, с другой - в другую

Добавлено через 1 минуту
Это не необходимо, но не знаю больше варианта, как можно обойти ситуацию с тем, что имена файлов могут повторяться
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 00:09
Я понял Вас. Опираться при сортировке нужно именно на дату создания файла или на дату изменения? Это очень важно. От этого будет зависеть выбор инструмента для решения задачи

Добавлено через 2 минуты
dhpro100, касаемо повторяющихся файлов выбор невелик. Если они пересекаются в одном каталоге, то либо взять за правило именовать файлы в арифметической прогрессии, либо добавлять к текущему имени префикс так же в арифметической прогрессии
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 00:10  [ТС]
Насколько я знаю, они одинаковые, так как фотографии напрямую с карты памяти фотоаппарата. Только почему-то в видео отличаются на минуту. В общем, я думаю, как удобнее вам и попроще)

Ошибся. Сейчас прочитал подробнее про дату создания и дату изменения и про то, как они работают. Наверное по дате изменения все-таки, так как дата создания, меняется при переносе фотографий на компьютер. Думаю, безопаснее через дату изменения)

Да, я так и подумал на счет файлов с одинаковым именем. Для меня это вызвало огромную сложность. Как и в целом, все эти задачи)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 00:20
Ещё момент... В папке DCIM лежат и фото и видео? Каке расширения у фото? Есть ли другие типы файлов, кроме фото и видео?
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 00:24  [ТС]
Нет, в DCIM только подкаталоги, внутри которых лежат фотографии. Видео в другом месте)
Фотографии все в RAW, расширение .ARW
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 00:28
dhpro100, создавать каталоги с датой нужно в какой-то нейтральной локации? Например, C:\photo\21.02.13?
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 00:30  [ТС]
С видео чуть сложнее, но я уже решил это:
Видео находятся по такому пути: D:\PRIVATE\M4ROOT\CLIP
Там 2 типа файлов:
1. Информация о видео (.XML)
2. Сами видеозаписи (.MP4)

Я неполный свой код скинул, только то, что касается фото, чтобы не путать лишний раз)
У меня есть строка в начале "del /f /s /q D:\PRIVATE\M4ROOT\CLIP\*.XML", за счет которой нет лишних файлов и в папке останутся только .MP4

Добавлено через 48 секунд
Вот путь для каталогов с датой: G:\MEDIA\SONY A6300\PH SONY A6300\RAW
Спасибо большое, что помогаете!)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 00:33
dhpro100, да пока не за что. Задача не горящая? Время позднее, завтра на работе с утра набросаю скрипт
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 00:35  [ТС]
Нет, не срочно)
Доброй ночи)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 01:18
dhpro100, взаимно

Добавлено через 30 минут
dhpro100, пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
setlocal EnableDelayedExpansion
for /r "D:\DCIM" %%a in (*) do (
    set "date_modify=%%~ta"
    if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~,10!\%%~nxa" (
        xcopy "%%a" "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~,10!\"
    ) else (
        call :step_1 "%%a"
    )
)
pause
exit
:step_1
set /A count+=1
if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~,10!\%~n1_!count!%~x1" (
    echo f | xcopy %1 "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~,10!\%~n1_!count!%~x1"
    set count=
    exit /b
) else (
    goto step_1
)
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 09:49  [ТС]
Доброе утро! Спасибо огромное! Все отлично работает)
Вопрос, если я сделаю такой же трюк, то получится сделать YY.MM.DD?
Windows Batch file
1
2
3
4
5
6
7
8
for /f %%a in ('wmic path win32_LocalTime Get Day^,Month^,Year /value') do >nul set "%%a"
set Month=00%Month%
set Month=%Month:~-2%
set Day=00%Day%
set Day=%Day:~-2%
set Year=00%Year%
set Year=%Year:~-2%
set datetemp=%Year%.%Month%.%Day%
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 10:07
dhpro100, доброе! Вам нужно получить имя папки в формате yy.mm.dd, где:
yy - год
mm - месяц
dd - день
?
1
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 10:37  [ТС]
Да, именно)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 10:39
dhpro100, а почему Вы берёте текущую дату? Нужна ведь дата изменения файла или я Вас не так понял?
0
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 10:43  [ТС]
Нет, вы все правильно поняли)
Это просто то, что получилось сделать с тем, что я делал еще до создания вопроса)
Ваш скрипт отлично работает и именно то, что нужно, но я не знаю как сделать, чтобы папки создавались не в формате DD.MM.YYYY, а в формате YY.MM.DD, к сожалению

Добавлено через 44 секунды
Кстати, для видео сделал тоже самое, спасибо большое)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 10:57
dhpro100, я понял, сейчас скорректирую

Добавлено через 6 минут
dhpro100, так, а yy - это 2 последние цифры года или все цифры года?

Добавлено через 6 минут
Пробуйте (4 цифры года):
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
setlocal EnableDelayedExpansion
for /r "D:\DCIM" %%a in (*) do (
    set "date_modify=%%~ta"
    if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-4!.!date_modify:~3,2!.!date_modify:~,2!\%%~nxa" (
        xcopy "%%a" "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-4!.!date_modify:~3,2!.!date_modify:~,2!\"
    ) else (
        call :step_1 "%%a"
    )
)
pause
exit
:step_1
set /A count+=1
if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-4!.!date_modify:~3,2!.!date_modify:~,2!\%~n1_!count!%~x1" (
    echo f | xcopy %1 "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-4!.!date_modify:~3,2!.!date_modify:~,2!\%~n1_!count!%~x1"
    set count=
    exit /b
) else (
    goto step_1
)
0
0 / 0 / 0
Регистрация: 18.07.2020
Сообщений: 29
16.02.2021, 11:04  [ТС]
Да, это две последние цифры года
Хорошо, спасибо, сейчас попробую)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.02.2021, 11:06
Цитата Сообщение от dhpro100 Посмотреть сообщение
Да, это две последние цифры года
Тогда так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
setlocal EnableDelayedExpansion
for /r "D:\DCIM" %%a in (*) do (
    set "date_modify=%%~ta"
    if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-2!.!date_modify:~3,2!.!date_modify:~,2!\%%~nxa" (
        xcopy "%%a" "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-2!.!date_modify:~3,2!.!date_modify:~,2!\"
    ) else (
        call :step_1 "%%a"
    )
)
pause
exit
:step_1
set /A count+=1
if not exist "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-2!.!date_modify:~3,2!.!date_modify:~,2!\%~n1_!count!%~x1" (
    echo f | xcopy %1 "G:\MEDIA\SONY A6300\PH SONY A6300\RAW\!date_modify:~-2!.!date_modify:~3,2!.!date_modify:~,2!\%~n1_!count!%~x1"
    set count=
    exit /b
) else (
    goto step_1
)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2021, 11:06
Помогаю со студенческими работами здесь

Проверка даты на четность и переименование файла
Здравствуйте! Требуется написать .bat файл следующего вида: Загружаемый .bat файл проверяет текущее число DATA, если оно четное то ко...

Переименование файла с подстановкой в название имени компьютера, даты и времени
Здравствуйте! Нужно переименовать файл list.txt в compname_date_time.txt в нижнем регистре

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

Изменить даты и время создания файла, взяв информацию из имени файла
Привет! Есть файл "Call@recording@005_20150216113542.mp3" В его имени после "_" идёт дата "20150216" и время "113542" создания...

Добавление к имени файла даты создания файла
Прошу помогите


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru