Показать полную графическую версию : Пакетное переименование файлов(.jpg) в разных папках (BAT)
Смотрите у меня есть папки:
asteklo1, asteklo2, asteklo3, asteklo4...
в каждой из них содержится по 2 файла (.jpg)
Мне нужен способ (тот же bat), для того чтобы пакетно переименовать все эти файлы (.jpg) -> в название папки и с нижним подчеркиванием с нумерацией файла
Пример:
папка "asteklo1", в нем должны находится "asteklo1_1" и "asteklo1_2"
и так с каждой папкой, кто-то шарит за эту тему?
я только создал пакетно все эти папки с разными названиями:
for /f %%i in (list.txt) do @md "%%~i"
ну естественно и в этом list.txt находились все названия папок строчками
Uragan66
09-08-2020, 11:56
Zharkyn, код нужен именно на cmd ? Powershell не подойдёт ?
$dr = 'J:\Download'
ForEach ($ln in (Get-ChildItem -Path $dr -Directory -Recurse | Foreach {$_.FullName})) {
Get-ChildItem $ln -Include *.jpg -Recurse | Foreach {$i=1} {Rename-Item $_ -NewName ("$($_.Directory.Name)_{0:D1}.jpg" -f $i++) -WhatIf}
}
В переменную $dr прописываете путь корневой директории (диска), где у Вас размещены нужные папки с файлами.
Проверяете правильность переименования сначала в консоли.
Если всё устроит, нужно будет убрать параметр -WhatIf
megaloman
09-08-2020, 15:07
@Echo Off
Set "BoxIn=Z:\Box_In"
Set "MaskDir=asteklo*.*"
Set "MaskFile=*.jpg"
Set "NoReg=.*_[0-9]*.jpg"
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%\%MaskDir%" /B /S /A:D`) DO (
Set /A N=0
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%%d\%MaskFile%" /B /A:-D`) DO (
FOR /F "usebackq delims=" %%a IN (`Echo %%f^|FINDSTR /E /I /V /R /C:"%NoReg%"`) Do (
Call :MyRen "%%d" "%%a"
)
)
)
Exit /B
:MyRen
Set /A N+=1
If Exist "%~1\%~nx1_%N%%~x2" GoTo :MyRen
Ren "%~1\%~2" "%~nx1_%N%%~x2"
Exit /B
greg zakharov
09-08-2020, 17:41
Если папки одноуровневые, то есть находятся в пределах одного каталога, а также заведомо содержат только по два изображения, задача в pwsh вполне решается однострочником вида:
(Get-ChildItem X:\common\asteklo*\*.jpg).ForEach{$x=++$x-eq2?2:1;Move-Item $_.FullName "$($_.Directory)\$($_.Directory.Name)_$x.jpg"}
Так что следует ли от автора ждать подробностей или причитаний, дескать, "копипаст не робит", вопрос.
См. также Как массово переименовать файлы по маске в PowerShell (http://www.outsidethebox.ms/17857/)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.