UnrulyAngel |
13-03-2024 14:15 3025337 |
Нумерация файлов в папке
Здравствуйте, прошу помощи, исходные данные такие:
1. есть общая папка: "k12345"
2. в этой папке есть еще 2-3: "подпапка 1", "подпапка 2" и тд.
3. в этих подпапках лежат файлы .png с названиями:
k12345_1.png
k12345_2.png
k12345_4.png
k12345_6.png
нужен .bat или .ps1, который мы кладем в папку "k12345" и при выполнении которого файлы в подпапках формата .png нумеруются корректно, а именно:
k12345_1.png
k12345_2.png
k12345_3.png
k12345_4.png
Заранее прошу прощения, если что-то не так описала, буду очень благодарна за помощь!
|
Вот например. В подпапках есть файлы определённого формата k<пять_цифр>_<цифра>.png. Нужно отсортировать эти файлы по <цифре> и переименовать эти файлы, изменив эту <цифру> на цифру, равную порядковому номеру файла в отсортированном списке файлов подобного формата в подпапке. Правильное условие?
|
UnrulyAngel |
13-03-2024 14:57 3025341 |
Цитата:
Цитата Sham
Вот например. В подпапках есть файлы определённого формата k<пять_цифр>_<цифра>.png. Нужно отсортировать эти файлы по <цифре> и переименовать эти файлы, изменив эту <цифру> на цифру, равную порядковому номеру файла в отсортированном списке файлов подобного формата в подпапке. Правильное условие? »
|
Да, но в названии после "k" может быть и 4 и 6 цифр, это артикул, т.е. опираемся на ту цифру, что после нижнего подчеркивания
|
А если переименование вызовет коллизию? Циферку меняем, а такой файл в папке уже существует.
|
UnrulyAngel |
13-03-2024 15:42 3025346 |
Цитата:
Цитата Sham
А если переименование вызовет коллизию? Циферку меняем, а такой файл в папке уже существует. »
|
заменяем, мне важно, чтобы была нумерация без прерываний, может переименовывание провести в 2 этапа, например сперва после _ поставить a,b,c,d и тд (более 25 не будет), а потом пройтись и пронумеровать, тут вам виднее наверно, я в этом не сильна ))
|
тестируйте
Код:
get-childitem $PSScriptRoot -Directory | % {
$dir = $_; $count = 0;
$dir | get-childitem -File | % {
if ($_.Name -match '^(k\d+_)(\d+)(\.png)$') {
[pscustomobject]@{ N = [int]$matches[2]; M = $matches; O = $_; }
}
} | sort-object 'N' | % { ++$count;
while (test-path ($newpath = join-path $dir.fullname ($name = $_.M[1] + $count + $_.M[3]))) {
if ($_.O.fullname -eq $newpath) { return }
++$count;
}
'rename: {0} -> {1}' -f $_.O.fullname, $name
$_.O.MoveTo($newpath);
}
}
|
UnrulyAngel |
13-03-2024 17:54 3025351 |
Огромное спасибо!
|
DJ Mogarych |
13-03-2024 18:00 3025352 |
Подразумевается, что файлы k12345 имеются в разных подпапках.
Код:
$tmpAdd = "tmpp"
$c = 1
dir $PSScriptRoot -Recurse -Include "*.png" |% {
Rename-Item $_ -NewName "$($tmpAdd + $_.name)"
}
dir $PSScriptRoot -Recurse -Include "*.png" |sort {[int]($_.basename -replace '\D')} |% {
Rename-Item $_ -NewName "$(($_.basename -replace "\d+$","$c" -replace "^($tmpAdd)+") + $_.Extension)"
$c++
}
|
Код:
@Echo Off &Cls
>nul Chcp 1251
Set "BoxIn=Z:\Box_In"
Set "BoxShr=k12345"
Set Mask="%BoxShr%_*.png"
Set "BoxAdd=Z:\Soft_Arc\123"
Set Arc="C:\Program Files\7-Zip\7z.exe" a -mx9 "Z:\Box_Arc\archive.7z"
Set /A M=0
Pushd "%BoxIn%\%BoxShr%" || (Echo Folder "%BoxIn%\%BoxShr%" not found &Pause &Exit /B 2)
For /R "%BoxIn%\%BoxShr%" %%f In ("%Mask%") Do (
Set /A M+=1
Call Set "@@@%%M%%=Ren "%%f.tmp" "%BoxShr%_%%M%%%%~xf""
Ren "%%f" "%%~nxf.tmp"
)
For /F "usebackq tokens=2 delims==" %%f In (`2^>nul Set "@@@"`) Do %%f
Popd
Pause
Exit /B 0
|
UnrulyAngel |
27-03-2024 00:08 3025821 |
Всем спасибо, очень выручили и сэкономили много часов времени, обожаю вас!
|
Время: 04:46.
© OSzone.net 2001-