Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/51: Рейтинг темы: голосов - 51, средняя оценка - 4.84
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
1

Записать дату и время создания каждого файла в его имя

08.09.2017, 12:57. Просмотров 9588. Ответов 27
Метки нет (Все метки)

Здравствуйте!

Прошу помощи. Есть каталог со множеством файлов (например, jpg, больше тысячи). Нужно в их имена добавить даты и время создания каждого из них. Как это сделать с помощью bat/cmd? И можно ли или надо писать программу?
Конечно, можно командой dir получить их список и на его основе написать батник с кучей строк типа:

copy name_file1.jpg name_file1_16032004-17:35.jpg
copy name_file2.jpg name_file2_24012012-09:24.jpg
. .
copy name_fileN.jpg name_fileN_14112006_11:45.jpg

Но, проделывать такое слишком муторно для каждого нового случая (а каталогов с файлами может быть много)...
Вот и хотелось бы что-то универсальное.

Спасибо за любые подсказки!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2017, 12:57
Ответы с готовыми решениями:

Как можно получить дату и время создания файла и его объем?
Здравствуйте! Скажите пожалуйста как можно получить дату и время создания файла и его объем. Задача...

Определить время и дату создания файла
помогите сделать лабу завтра сдавать( 1. Определить атрибуты файла turbo.exe. 2. Определить...

Изменить дату и время создания файла
Собственно, не меняется дата и время, не могу понять в чем ошибка. STK segment para stack...

Установить дату и время создания файла
Написать программу, которая устанавливает файлу ZACHET.txt дату создания 1.05.2000 время 11:38 ...

27
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
08.09.2017, 13:10 2
а зачем это надо?
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
08.09.2017, 16:41 3
Лучший ответ Сообщение было отмечено EvgenyV как решение

Решение

EvgenyV,
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
set "d=C:\papka"
for /f "tokens=1-3*" %%a in ('dir /a-d/tc "%d%"^|findstr/rc:"^[^ ]"') do set "tf=%%b"& call :rf "%d%\%%d" "%%~nd_%%a_%%tf::=-%%%%~xd"
pause& exit
 
:rf
 ren "%~1" "%~2"
exit /b
Добавлено через 10 минут
Цитата Сообщение от volodin661 Посмотреть сообщение
а зачем это надо?
не скажи, бывает дата (именно создания) собьется в "самый нужный момент", а локоть не укусить уже, хотя, если вопрос повернуть по-другому, например, сделать так чтобы создавалась папка с датой и временем создания в имени а уже в нее укладывались файлы за эту дату, но это если время создания каждого файла не имеет особого значения относительно указанной даты.
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
08.09.2017, 16:55 4
Цитата Сообщение от alpap Посмотреть сообщение
не скажи, бывает дата (именно создания) собьется в "самый нужный момент",
ну-да, ну да,
у меня тоже есть похожие истории, например:
больной моет ногу, чтобы пойти ко врачу;
придя к нему, обнаруживает, что мыл не ту ногу.
0
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
08.09.2017, 21:18  [ТС] 5
Ноги тут не при чем... Если вы не видите необходимости, то это не значит, что ее нет у других. У меня около 60 каталогов и в каждом сотни фотографий. Есть несколько CD/DVD дисков с ними. Вот и хзадумал систематизировать. На смартфоне фото именуется датой и временем, а вот на фотоаппарате порядковым номером, и если фото обработать, то дата и время меняются. А хотелось бы их не терять. Вижу, что систематизировать фотографии легче по датам и времени. А, если еще и добавить пару-тройку буковок для обозначения места съемки или содержания, то вообще будет чудесно. Поэтому все же жду ответы по сути, а не такие...

Добавлено через 3 минуты
Большое спасибо. Попробую чуть позднее, т.к. сейчас в Линуксе. Перейду на Винду и попробую...

Добавлено через 1 час 14 минут
alpap, большое спасибо! Попробовал. Все работает.

Есть некоторые недостатки, но это уже не сложно.
1. Дата записывается с точками, что может быть проблемой в старых ОС (заменю на "-").
2. Выходные файлы формируются в каталоге, где запускается батник, а не в каталоге "d" (в команде ren укажу путь, куда записывать).
3. Если же батник поместить в каталог с фотографиями, то и он переименовывается (решается при изменении по п.2).

Это написал просто для сведения... База есть, далее доработаю. Спасибо!
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
08.09.2017, 23:33 6
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
set "d=C:\papka"
pushd "%d%"
 for /f "tokens=1-3*" %%a in ('dir /a-d/tc "*.jpg"^|findstr/rc:"^[^ ]"') do set "tf=%%b"& set "df=%%a"& call :rf "%%d" "%%~nd_%%df:.=-%%_%%tf::=-%%%%~xd"
popd
pause& exit
 
:rf
 ren "%~1" "%~2"
exit /b
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
09.09.2017, 04:28 7
Цитата Сообщение от EvgenyV Посмотреть сообщение
Ноги тут не при чем...
Это обычное заблуждение, EvgenyV,
ноги очень нужны, например, чтобы сходить в Гугл и почитать как организован процесс хранения и поиска информации,
используя файловые системы ОС Windows, да и других систем тоже.

Я же совсем вкратце могу тебе рассказать о причинах моего скепсиса.
Дело в том, что ОС берёт на себя манипулирование метаданными файла:
- Временем создания, временем последнего изменения, временем последнего доступа,
размером, признаком архивации, признаком индексации, признаком сжатости, признаком шифрования, признаком скрытости, признаком системности, данными по контролю доступа, типом хранящихся данных.
Кроме того т.н офисные файлы несут в себе доп. информацию о времени, перс.данных пользователя/компании и прочие доп. категории.

ОС может предоставить тебе доступ к этим метаданным, а также предоставить возможность их изменения.

Таким образом нет никакой нужды самостоятельно дублировать временные атрибуты, запихивая их в имя файла.
Если такая нужда есть, это скорее всего означает, что у ты выбрал неудачный файловый менеджер либо не умеешь пользоваться его возможностями.
0
130 / 114 / 25
Регистрация: 03.05.2017
Сообщений: 323
09.09.2017, 10:35 8
Пoльзуюсь мобильным телефоном GT-E2121B и у него нет опции сохранения момента съёмки в имени файлов. Максимум - перед съёмкой выставить своё имя файла как дата и час, чтобы потом переименовывать файлы в соответствии со свойствами. Раньше так делал, перед передачей на ПК, что занимало минут 10-20 нуднейщего процесса, так как при передаче по BlueTooth свойства файлов никак не передаются…
Через флеш-адаптер свойства доступны и я набросал автомат, который копирует файлы, присваивая им имена, соответствующие моменту съёмки:
Копировщик
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
::GT-Copy.bat
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set mask=*.*
set last=
set /a files=0
set /a index=0
set /a errors=0
set /a ss=10
rem %~d1
rem cd %~p1
 
for /f %%f in ('dir %~dp1 /b') do set /a files+=1
 
for /f %%f in ('dir %~dp1 /b') do (
        for %%i in ("%%f") do (
                set dt=%%~ti
                set dt=!dt:~6,4!!dt:~3,2!!dt:~0,2!.!dt:~11,2!!dt:~14,2!
                if "!dt!"=="!last!" ( set /a ss+=1 ) else ( set /a ss=10 )
                set last=!dt!
                if "%%~xi"==".amr" (
                        set folder=Sounds
                ) else (
                        if "%%~xi"==".mp3" (
                                set folder=Music
                        ) else (
                                if "%%~xi"==".mp4" (
                                        set folder=Videos
                                ) else (
                                        set folder=Images
                                )
                        )
                )
rem                echo %%~dpnxi !dt!!ss!%%~xi
                copy "%%~dpnxi" "%~dp0!folder!\!dt!!ss!%%~xi" || set /a errors+=1
                cls
                set /a index+=1
                set /a progress=!index!*100/!files!
                echo !progress! - !errors! errors...
        )
)
pause

P.S.: Как пользоваться:
Так как скрипт довольно прост, необходимо создать в его директории папки Sounds, Music, Videos, Images.
Далее, любой из файлов исходной папки перетаскивается «GT-copy.bat» и всё…
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
09.09.2017, 13:33 9
Alikberov,
Цитата Сообщение от Alikberov Посмотреть сообщение
set dt=%%~ti
это дата изменения
да и слегка длинновато, зачем столько for-ов напичкано и остальное можно сильно упростить, например даже здесь:
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
pushd "papka"
 :: Ваш вариант
 for /f %%f in ('dir /b') do for %%i in ("%%f") do echo %%~ti
 :: Мой
 for /f "tokens=1-3*" %%a in ('dir /a-d/tc^|findstr/rc:"^[^ ]"') do echo %%a %%b %%d
popd
pause
(у меня и дата (СОЗДАНИЯ) со временем уже разделены и без труда также дорабатываются до нужной кондиции)
0
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
13.09.2017, 16:05  [ТС] 10
alpap, а можно ли дату (в данном случае, дату создания) разделить на день, месяц и год? Искал в форуме, но не нашел... Спасибо.

Добавлено через 6 минут
А может в Копировщике у Alikberov это?
Windows Batch file
1
set dt=!dt:~6,4!!dt:~3,2!!dt:~0,2!.!dt:~11,2!!dt:~14,2!
Почти утвердился в этом, но прошу подтверждения...
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
13.09.2017, 16:07 11
EvgenyV,
Цитата Сообщение от EvgenyV Посмотреть сообщение
Искал в форуме, но не нашел...
а volodin661 то правильно вам отписал
Цитата Сообщение от volodin661 Посмотреть сообщение
ноги очень нужны, например, чтобы сходить в Гугл и почитать
в данном случае даже ходить никуда не надо - поднять глаза (может открыть) и клацнуть мышкой

выше в коде Alikberov стр18 посмотрите
0
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
13.09.2017, 20:55  [ТС] 12
Так, я и привел ее через несколько минут (Ваш ответ опередил мое дополнение), только номер строки изменился с 18 на 1, т.к. она в моем сообщении одна... Но, вы подтвердили мой выбор, спасибо...
0
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
15.09.2017, 23:33  [ТС] 13
И вот, что у меня получилось (жду замечания):
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off
rem копирование файлов формата jpg с записью даты и времени создания в начало наименований файлов копий
rem при запуске с параметром = названию нового подкаталога запись копий в этот подкаталог
rem при запуске без параметра запись копий в текущий каталог
rem формируются наименования в формате ГГГГМММДД-ЧЧММ_NameFile.jpg, где NameFile.jpg - наименование исходного файла
md %~dp0%1
set dr=%~dp0%1
for /f "tokens=1-3*" %%a in ('dir /a-d/tc "*.jpg"^|findstr/rc:"^[^ ]"') do set "df=%%a" & set "tf=%%b" & call :pd "%%d" "%%a" "%%a-%%tf::=%%_%%~nd%%~xd"
pause& exit
*
:pd
rem формируем дату в виде ГГГГМММДД
set ta="%~2"
set yy=%ta:~7,4%
set mm=%ta:~4,2%
set dd=%ta:~1,2%
set dat=%ta:~7,4%%ta:~4,2%%ta:~1,2%   
call set data=%%dat:~0,8%%
 
rem вычисляем длину остатка строки
set kk="%~3"
set str=%kk%
call :strLen str strLen
set /A len=strlen-11
 
rem выделяем остаток строки
call set tt=%%kk:~11,%len%%%
rem формируем новое наименование файла
set nn=%data%%tt%
rem вместо COPY можно использовать REN и будут переименовываться исходные файлы без создания копий 
copy "%~1" "%dr%\%nn%"
exit /b
 
:strLen
setlocal enabledelayedexpansion
 
:strLen_Loop 
   if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
16.09.2017, 10:51 14
Цитата Сообщение от EvgenyV Посмотреть сообщение
жду замечания
так не проще?

Windows Batch file
1
2
3
4
5
6
@echo off
set "d=papka"
pushd "%d%"
 for /f "tokens=1-6* delims=.: " %%a in ('2^>nul dir /a-d/tc "*.jpg"^|findstr /rc:"^[^ ]"') do ren "%%g" "%%c%%b%%a-%%d%%e_%%g"
popd
pause
1
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
18.09.2017, 20:06  [ТС] 15
Для написания - проще, но для понимания - сложнее, т.к практически не напишешь комментарии к отдельным этапам и надо очень хорошо знать вошедшие в строку команды и каким образом они увязываются меж собой... Вообще, ваши строки привели меня к более глубокому изучению команд, используемых в bat-файлах. Спасибо!
А может вы подскажете и как получить секунды во времени создания файла? Вычитал, что только делая вставки на других языках... А как по-вашему?
Вообще, с помощью bat-файла решил ускорить переименование своих файлов, но в планах- написать программу на С++, такую, чтобы и под линуксами работала...
Еще раз, спасибо за ваши подсказки.
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
18.09.2017, 23:48 16
Цитата Сообщение от EvgenyV Посмотреть сообщение
как получить секунды
на cmd даже сходу и не знаю, на PowerShell - легко
Windows Batch file
1
powershell "get-childitem -path 'C:\papka\*.jpg' | format-list -property Name, CreationTime"
на нем полностью лучше делать сразу весь код, но это уже в соответствующую ветку.
0
0 / 0 / 1
Регистрация: 17.03.2015
Сообщений: 28
19.09.2017, 12:10  [ТС] 17
Что ж, и за это спасибо! Вы мне очень помогли... Спасибо!
0
0 / 0 / 0
Регистрация: 22.02.2020
Сообщений: 1
22.02.2020, 01:54 18
Цитата Сообщение от alpap Посмотреть сообщение
EvgenyV,
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
set "d=C:\papka"
for /f "tokens=1-3*" %%a in ('dir /a-d/tc "%d%"^|findstr/rc:"^[^ ]"') do set "tf=%%b"& call :rf "%d%\%%d" "%%~nd_%%a_%%tf::=-%%%%~xd"
pause& exit
 
:rf
 ren "%~1" "%~2"
exit /b
Добавлено через 10 минут

не скажи, бывает дата (именно создания) собьется в "самый нужный момент", а локоть не укусить уже, хотя, если вопрос повернуть по-другому, например, сделать так чтобы создавалась папка с датой и временем создания в имени а уже в нее укладывались файлы за эту дату, но это если время создания каждого файла не имеет особого значения относительно указанной даты.
alpap, данная команда выводит дату создания файла, будьте добры, помогите с командой сохранения файла датой изменения файла (см. вложение).
Формат выходного файла нужен "Имя файла"_ГГГГ.ММ.ДД
0
Миниатюры
Записать дату и время создания каждого файла в его имя  
3089 / 1639 / 612
Регистрация: 06.06.2017
Сообщений: 5,561
22.02.2020, 03:31 19
Rema78, правильней бы здесь спросить.
0
3655 / 1877 / 612
Регистрация: 26.04.2015
Сообщений: 6,214
22.02.2020, 03:40 20
Цитата Сообщение от Rema78 Посмотреть сообщение
нужен "Имя файла"_ГГГГ.ММ.ДД
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
call :#rn "file.txt"
pause& exit
 
:#rn
 set "dw=%~t1"
 ren "%~1" "%~n1_%dw:~6,4%.%dw:~3,2%.%dw:~0,2%%~x1"
exit /b
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2020, 03:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определить время и дату создания файла
1. Определить атрибуты файла turbo.exe. 2. Определить время и дату создания файла. 3. Установить...

Изменить дату и время создания файла
Здравствуйте! Сразу извиняюсь за флуд, ведь точно такой же вопрос я задал в...

Изменить дату и время создания файла
Можно ли средствами VBA изменить дату создания текстового файла?

Получить дату и время создания файла
Как получить дату и время создания файла.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.