
Я хочу создать скрипт powershell для переименования файлов pdf из соответствующих строк pdftotext и/или заголовка pdfinfo. Сначала я хочу создать список с несколькими вариантами выбора файлов pdf по определенному пути и выбрать из списка файл pdf, который я хочу переименовать. Может ли кто-нибудь помочь создать список выбора из имен файлов, которые могут быть переданы через команду gci?
решение1
Спасибо за все комментарии. Вот мой код для переименования файла pdf из соответствующего текста или метаданных. Код очень примитивный, потому что я не айтишник; просто позаимствовал и собрал куски у других.
$x = @() function Read-OpenFileDialog([string]$WindowTitle, [string]$InitialDirectory, [string]$Filter = "Все файлы (*.*)|*.*", [switch]$AllowMultiSelect) { Add-Type -AssemblyName System.Windows.Forms $openFileDialog = Новый-Объект System.Windows.Forms.OpenFileDialog $openFileDialog.Title = $WindowTitle если (![string]::IsNullOrWhiteSpace($InitialDirectory)) { $openFileDialog.InitialDirectory = $InitialDirectory } $openFileDialog.Filter = $Filter если ($AllowMultiSelect) { $openFileDialog.MultiSelect = $false } $openFileDialog.ShowHelp = $true # Без этой строки функция ShowDialog() может зависнуть в зависимости от конфигурации системы и запуска из консоли или ISE. $openFileDialog.ShowDialog() > $null если ($AllowMultiSelect) { вернуть $openFileDialog.ИменаФайлов } иначе { вернуть $openFileDialog.ИмяФайла } } $file = Read-OpenFileDialog -WindowTitle "Выбор файла PDF" -InitialDirectory '$path' -Filter "PDF-файлы (*.pdf)|*.pdf" if (![string]::IsNullOrEmpty($file)) { Write-Host "Вы выбрали файл: $file" } else { "Dosya seçmediniz" } $path= "$file"|Разделить-путь cd $путь [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") $objForm = Новый-Объект System.Windows.Forms.Form $objForm.Text = "ВЕРНАЯ ФОРМУЛА" $objForm.Size = Новый-Объект System.Drawing.Size(700,400) $objForm.StartPosition = "ЦентрЭкрана" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") { $x=$objListbox.SelectedItem;$objForm.Close() } }) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Закрыть()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = Новый-Объект System.Drawing.Size(75,220) $OKButton.Size = Новый-Объект System.Drawing.Size(75,23) $OKButton.Text = "EVET" $objForm.Controls.Add($OKButton) $OKButton.Add_Click({$x=$objListbox.SelectedItem;$objForm.Close()}) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = Новый-Объект System.Drawing.Size(200,220) $CancelButton.Size = Новый-Объект System.Drawing.Size(75,23) $CancelButton.Text = "ПОДТВЕРЖДЕНО" $CancelButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($CancelButton) $objLabel = Новый-Объект System.Windows.Forms.Label $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = Новый-Объект System.Drawing.Size(480,20) $objLabel.Text = "СПИСОК НОВЫХ МАТЕРИАЛОВ:" $objForm.Controls.Add($objLabel) $objListbox = Новый-Объект System.Windows.Forms.Listbox $objListbox.Location = New-Object System.Drawing.Size(10,40) $objListbox.Size = Новый-Объект System.Drawing.Size(600,840) $objListBox.Font = "Arial черный" pdftotext -eol dos -l 2 $file tmp.txt (gc tmp.txt) | ? {$_.trim() -ne "" } | set-content tmp.txt $i=pdfinfo "$file" |grep -i title|sed -e 's/Заголовок\:[ ]*//g' Если (![строка]::IsNullOrEmpty($i)) { $строка6=$i } $line1= (Get-Content tmp.txt)[0] $line2= (Get-Content tmp.txt)[1] $line3= (Get-Content tmp.txt)[2] $line4= (Get-Content tmp.txt)[3] $line5= (Get-Content tmp.txt)[4] [void] $objListbox.Items.Add("$line1") [void] $objListbox.Items.Add("$line2") [void] $objListbox.Items.Add("$line3") [void] $objListbox.Items.Add("$line4") [void] $objListbox.Items.Add("$line5") [void] $objListbox.Items.Add("$line6") $objListbox.Высота =170 $objForm.Controls.Add($objListbox) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() $z= $objListbox.ВыбранныеЭлементы если ($z -ne ""){ $z= $z -заменить '[^a-zA-Z0-9_ ]',"_" $z= $z -заменить '[ ]',"_" $z= $z -заменить '_{2,}',"_" $z= $z.Обрезка() Написать-Хост "dosya $z.pdf olarak kaydedildi" переименовать-элемент $file -newname $z".pdf" } Иначе {Write-Host "isim değişmedi"} rm tmp.txt Пауза $x