Переименовать файлы в папке по первым значениям

Подскажите, можно ли сделать скрипт, который бы переименовывал все файлы в папке по следующему принципу: Есть файлы "11 текст1.txt", "11 текст2.txt", "12 текст3.txt", "12 текст4.txt" и т.д. Надо, чтоб скрипт по первым значениям (они всегда числа) переименовывал их следующим образом: "11_12345678_1.txt", "11_12345678_2.txt", "12_12345678_1.txt", "12_12345678_2.txt", где 11 и 12 - это константы (равны искомым файлам), 12345678 - постоянное значение, а на конце 1,2,3 - это счётчик. Делаю это в Тотал Коммандере через массовое переименование, хотелось бы автоматизировать.


Ответы (1 шт):

Автор решения: Oopss

PowerShell

$c_file_names="12345678"
$f = Get-ChildItem -Filter "*.txt"
echo $f
$cnt = @{}
ForEach ($file in $f){
    if($file.Name -match '^\d+'){
        $dig = $Matches[0]
    }
    if(-not $cnt.ContainsKey($dig)){
        $cnt[$dig] = 0
    }
    
    $cnt[$dig]++
    $new_fn ="{0}_{1}_{2}.txt" -f $dig, $c_file_names, $cnt[$dig]
    Rename-Item -Path $file.FullName -Newname $new_fn
}

11 текст1.txt
11 текст2.txt
12 текст3.txt
12 текст4.txt
mre.ps1

11_12345678_1.txt
11_12345678_2.txt
12_12345678_1.txt
12_12345678_2.txt
mre.ps1

Попробуй строку поменяй на $new_fn ="{0:d2}_{1}_{2}.txt" -f [int]$dig, $c_file_names, $cnt[$dig]

01_12345678_1.txt
01_12345678_2.txt
11_12345678_1.txt
11_12345678_2.txt
12_12345678_1.txt
12_12345678_2.txt
→ Ссылка