Разрыв, управление начальным именем файла

Разрыв, управление начальным именем файла
Разрыв, управление начальным именем файла - kellysikkema @ Unsplash

Используя PDFTK burst многостраничный PDF файл в отдельные файлы, мне нужен способ, который позволил бы мне контролировать первое имя файла и номер, с которого оно начинается для соглашения об именовании выходного файла.

например, я хочу, чтобы начальное имя файла для первой страницы, которую он извлекает в свой собственный PDF-файл, имело имя: "e00526.pdf". Таким образом, он будет "разрывать" многостраничный PDF-файл постепенно, как например: "e00526.pdf", "e00527.pdf", "e00528.pdf", "1" и т.д. по имени выходного файла.

На данный момент это то, что у меня есть:

#[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
#$firsFile = [Microsoft.VisualBasic.Interaction]::InputBox("Enter first file name:", "File name")

$firstFile = "e00526"

$QRDir = "C:\1_PDF"

chdir $QRDir

$output = "e00526%d.pdf"

pdftk input.pdf burst output $output

это дает стандарт именования выходного файла burst с 1, добавляемым в конец имени базового файла для первой страницы, извлеченной в собственный PDF файл. Затем эта добавленная 1 увеличивается на e005261.pdf для каждой последующей извлеченной страницы.

Вот что делает этот код: "e005262.pdf", "e005263.pdf", "e00526.pdf", "e00527.pdf" и т.д.

Что мне нужно: "e00528.pdf", "1", "6" и т.д.

вместо того, чтобы добавлять 6 после 7 в имени файла, он должен увеличить 1 до burst и т.д., но начиная со второй извлеченной страницы, чтобы я контролировал начальную страницу e00526.pdf имени файла.


Обновление

Я не думаю, что это может так работать из-за этой проблемы с сортировкой:

Проблема сортировки

"e005261.pdf" должен стать "e00526.pdf" и "e0052611.pdf" должен стать "e00537.pdf".

Вот почему я думаю, что все было бы намного проще, если бы мы просто нашли способ дать ему первое имя файла и позволить ему увеличиваться на 1 цифру после этого.

это решение для переименования файлов после операции PDFTK, которое будет использовать логику для получения частей имени базового файла и установки их как типов данных int, вычислять их для желаемых значений инкрементных чисел, а затем конкатенировать их вместе, чтобы использовать для нового базового файла каждого файла.

PowerShell

Remove-Whatif из приведенного ниже PowerShell, чтобы запустить логику, а не говорить вам, что произойдет, если она будет запущена. Также, если вам нужно рекурсивно обходить подпапки внутри C:\1_PDF\, вы можете добавить параметр -Recurse в команду Get-ChildItem (т.е. Get-ChildItem -Path "C:\1_PDF\*.pdf" -Recurse).

Get-ChildItem -Path "C:\1_PDF\*.pdf" | % { Process { 
    $firstFile = [string]$_.Basename;
    Try { [int]$fnameF = $firstFile[1..5] -join ""} Catch {};
    Try { [int]$fnameL = $firstFile[6..99] -join ""} Catch {};
    $f = Try { [convert]::ToInt32($firstFile[6..99] -join "", 10) } Catch {};
    If ( $f -is [int] ) { 
        Rename-Item -Path $_.FullName -NewName "$($_.BaseName[0])$(([string]($fnameF+$fnameL-1)).PadLeft(5,"0"))$($_.Extension)" -WhatIf;
        } Else {
        Write-Host "$($_.BaseName)$($_.Extension) does not end with numerical digits in its basename." -ForegroundColor Yellow 
        };
    }}; 

Вспомогательные ресурсы

  • Обычно Get-ChildItem возвращает объект FileInfo. Эти объекты содержат несколько полезных свойств, среди которых...

    • полный путь, имя файла и расширение (FullName),
    • только путь (DirectoryName),
    • имя файла (Name), и
    • имя файла без расширения (BaseName)

    Источник

  • Переименовать пункт

  • Определение типов данных PowerShell

  • Операторы PowerShell - Поиск индексного номера значения в массиве PowerShell

  • Try {...} Catch {...} Finally {...}

  • about_Arithmetic_Operators

  • Метод String.PadLeft


NevaDev, 24 января 2023 г., 22:31