CMD/BAT - [решено] Переименовать группу файлов

Ответить
Аватара пользователя
astiome

CMD/BAT - [решено] Переименовать группу файлов

Сообщение astiome »

Добрый день!

Мне нужна помощь в переименовании файлов в папке.

Хочу упорядочить все имена фото и привести к общему знаменателю, на входе имею порядка 2 тысяч кадров



00100sPORTRAIT_00100_BURST20180828121607514_COVER.jpg

00000PORTRAIT_00000_BURST20181231130219048.jpg

IMG_20181231220815541_COVER.jpg



На выходе хочу получить

IMG_20161205_123633.jpg

(IMG_дата_время.jpg)



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

Подскажите, пожалуйста, код для автоматизации процесса.
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - [решено] Переименовать группу файлов

Сообщение DJ Mogarych »

Если в фотографиях есть метаданные, лучше переименовывать их по EXIF, например, с помощью

https://www.amok.am/en/freeware/amok_exif_sorter/
Аватара пользователя
Serguei Kouzmine

Re: CMD/BAT - [решено] Переименовать группу файлов

Сообщение Serguei Kouzmine »

Цитата astiome:



Подскажите, пожалуйста, код для автоматизации проце
CMD/BAT - [решено] Переименовать группу файлов




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

Re: CMD/BAT - [решено] Переименовать группу файлов

Сообщение astiome »

Цитата DJ Mogarych:



лучше переименовывать их по EXIF
CMD/BAT - [решено] Переименовать группу файлов




Спасибо огромное!

Это полностью решает мой вопрос!
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Переименовать группу файлов

Сообщение megaloman »

vbs

Код:

Код: Выделить всё

BoxIn = "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

Re: CMD/BAT - [решено] Переименовать группу файлов

Сообщение YuS_2 »

Цитата astiome:



Хочу упорядочить все имена фото и привести к общему знаменателю, на входе имею порядка 2 тысяч кадров
CMD/BAT - [решено] Переименовать группу файлов




Мне хватало распределения файлов по каталогам:



Код:

Код: Выделить всё

# Создаются подкаталоги 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}
}

При желании, можно приспособить и для переименований...




Цитата astiome:



Это полностью решает мой вопрос!
CMD/BAT - [решено] Переименовать группу файлов




Не на всех "картинках" могут присутствовать данные EXIF, в скрипте powershell это учтено...
Ответить

Вернуться в «Скриптовые языки администрирования Windows»