Используя 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
, вычислять их для желаемых значений инкрементных чисел, а затем конкатенировать их вместе, чтобы использовать для нового базового файла каждого файла.
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