Войти

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


UnrulyAngel
17-07-2023, 16:34
Всем добрый день, использую bat для некоторой оптимизации рабочего процесса, очень выручает! Много решений нашла на данном форуме, но сама, к сожалению не пишу, сейчас появилась потребность в батнике, который переименовывает файлы по имени главной папки, т.е.

у нас есть главная папка "12345" (таких,
в ней лежит 3 папки с разными названиями (мама, папа, дочь), в них лежат файлы p4154_1.png, p4154_2.png, p4154_3.png и тд (имена файлов могут быть разной длины, но у всех есть счетчик _1, _2 и тд),
также в главной папке рядом с подпапками есть файлы .psd, которые названы p4154_мама.psd, p4154_папа.psd, p4154_дочь.psd.

12345
->p4154_мама.psd
->p4154_папа.psd
->p4154_дочь.psd
->мама
-->p4154_1.png
-->p4154_2.png
-->p4154_3.png
->папа
-->p4154_1.png
-->p4154_2.png
-->p4154_3.png
->дочь
-->p4154_1.png
-->p4154_2.png
-->p4154_3.png


Необходим bat, который я буду класть в главную папку, он будет брать название этой главной папки (она всегда находится на уровень выше файлов расположенных в ней) и менять название каждого файла .png и .psd на название главной папки, при этом всё что после нижнего подчеркивания (включая и его) должно сохраниться, т.е. на выходе будет

12345
->12345_мама.psd
->12345_папа.psd
->12345_дочь.psd
->мама
-->12345_1.png
-->12345_2.png
-->12345_3.png
->папа
-->12345_1.png
-->12345_2.png
-->12345_3.png
->дочь
-->12345_1.png
-->12345_2.png
-->12345_3.png

Надеюсь понятно объяснила, если что извините, я впервые прошу помощи, просто ничего похожего не смогла найти ((( Буду очень благодарна за помощь!

DJ Mogarych
17-07-2023, 21:09
Powershell

$folder = $PSScriptRoot -replace '.*\\'

dir -Include "*.png","*.psd" -Recurse |? basename -match '_.+$' |% {
Rename-Item $_ ($folder+"_"+$_.basename.Split('_')[-1]+$_.extension) -WhatIf
}
pause


Скопируйте код в файл script.ps1 и запускайте его ПКМ -> Выполнить с помощью Powershell.
После проверки корректности переименований (код изначально только выводит информацию) уберите из кода -WhatIf и pause

UnrulyAngel
17-07-2023, 22:55
Powershell
Код:
$folder = $PSScriptRoot -replace '.*\\'
dir -Include "*.png","*.psd" -Recurse |? basename -match '_.+$' |% {
Rename-Item $_ ($folder+"_"+$_.basename.Split('_')[-1]+$_.extension) -WhatIf
}
pause
Скопируйте код в файл script.ps1 и запускайте его ПКМ -> Выполнить с помощью Powershell.
После проверки корректности переименований (код изначально только выводит информацию) уберите из кода -WhatIf и pause »

Супер, впервые использую Powershell и это божественно! Всё прекрасно работает, вы оптимизировали мне очень нудный процесс, огромное человеческое спасибо!!!




© OSzone.net 2001-2012