PDA

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


astiome
17-08-2023, 19:47
Добрый день!
Мне нужна помощь в переименовании файлов в папке.
Хочу упорядочить все имена фото и привести к общему знаменателю, на входе имею порядка 2 тысяч кадров

00100sPORTRAIT_00100_BURST20180828121607514_COVER.jpg
00000PORTRAIT_00000_BURST20181231130219048.jpg
IMG_20181231220815541_COVER.jpg

На выходе хочу получить
IMG_20161205_123633.jpg
(IMG_дата_время.jpg)

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

DJ Mogarych
17-08-2023, 23:26
Если в фотографиях есть метаданные, лучше переименовывать их по EXIF, например, с помощью
https://www.amok.am/en/freeware/amok_exif_sorter/

Serguei Kouzmine
18-08-2023, 03:38
Подскажите, пожалуйста, код для автоматизации проце »

есть разница между "помогите доработать" и "сделайте за меня"

astiome
18-08-2023, 11:53
лучше переименовывать их по EXIF »
Спасибо огромное!
Это полностью решает мой вопрос!

megaloman
18-08-2023, 13:20
vbsBoxIn = "Z:\Box_In" 'Папка с файлами
FMask = "*.jpg"
RMask = "20\d{12}"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = RMask

With CreateObject("Shell.Application")
Set Fitems = .Namespace(BoxIn).Items
Fitems.Filter 64 + 128, FMask

For Each f In Fitems
If RegMid(f.Name, Reg, Sout) Then
With FSO
.MoveFile f.Path, BoxIn + "\IMG_" + Mid(Sout, 1, 8) + "_" + Mid(Sout, 9, 6) + "." + .GetExtensionName(f.Name)
End With
End If
Next
End With
'''''''''''''''''''''''''''''''''''''End Sub
Function RegMid(S, Reg, Sout)
Sout = Empty: RegMid = Reg.Test(S)
If RegMid Then Sout = Reg.Execute(S).Item(0)
End Function

YuS_2
18-08-2023, 13:50
Хочу упорядочить все имена фото и привести к общему знаменателю, на входе имею порядка 2 тысяч кадров »
Мне хватало распределения файлов по каталогам:
# Создаются подкаталоги yyyy\MM, по дате съемки фото (EXIF) или по дате изменения
# файла, если данные EXIF отсутствуют.
# Файлы перемещаются в соответствующие датам каталоги.
# Обработка файлов производится c рекурсией
# При наличии дубликатов наименований файлов, производится добавление суффикса
# "_copy_N", N - номер копии
# Ничего не удаляется и проверки фото на идентичность, не производится
add-type -ass system.drawing

$tag = 0x9003 # Тег EXIF
$src = ".\1" # Исходный каталог, где расположены исходные файлы, можно указать абсолютный путь
$out = ".\OUT" # Целевой каталог, где формируется структура целевых файлов, лучше указать абсолютный путь
$flt = "*.jpg", "*.3gp", "*.mp4", "*.mpg", "*.png" # фильтр расширений файлов

dir $src -inc $flt -file -rec|%{
$dtmp=$null
# Ловушка для отсутствующих тегов EXIF:
trap {continue}
$arr = new-object system.drawing.bitmap($_.fullname)
$dtmp = [text.encoding]::ascii.getstring($arr.getpropertyitem($tag).value)
if($dtmp -eq $null -or $dtmp -match "0000"){
$a = get-date($($_.lastwritetime)) -f "yyyy\\MM"
} else {
$date = $dtmp -replace '^(\d{4}):(\d{2}):(\d{2})','$1.$2.$3'
$a = get-date($date) -f "yyyy\\MM"
}
$b = $out + '\' + $a
if (!(test-path $b -pathtype container)){
ni $b -type directory|out-null
}
$dir = gi $b
# Освобождаем файлы:
$arr.dispose()
$dtmp.dispose()
# Перемещаем файлы
if (test-path $($dir.fullname+'\'+$_.name) -pathtype leaf){
$cnt = 1
$file = $dir.fullname+'\'+$_.basename+'_copy_'+$cnt+$_.extension
while (test-path $file -pathtype leaf){
$cnt++
$file = $dir.fullname+'\'+$_.basename+'_copy_'+$cnt+$_.extension
}
# write-host $file -for cyan
move $_.fullname $file
} else {move $_.fullname $dir.fullname}
}
При желании, можно приспособить и для переименований...

Это полностью решает мой вопрос! »
Не на всех "картинках" могут присутствовать данные EXIF, в скрипте powershell это учтено...




© OSzone.net 2001-2012