
Quero criar um script do PowerShell para renomear arquivos PDF de suas respectivas linhas pdftotext e/ou título pdfinfo. Primeiro, quero fazer uma lista de múltipla escolha de arquivos PDF em um determinado caminho e escolher um arquivo PDF da lista que desejo renomear. Alguém poderia ajudar a fazer uma lista de opções de nomes de arquivos que pode ser canalizada através do comando gci?
Responder1
Obrigado por todos os comentários. Aqui está meu código para renomear um arquivo PDF a partir de seu respectivo texto ou metadados. O código é altamente primitivo porque não sou um homem de TI; apenas peguei emprestado e reuni peças de outras pessoas.
$x = @() função Read-OpenFileDialog([string]$WindowTitle, [string]$InitialDirectory, [string]$Filter = "Todos os arquivos (*.*)|*.*", [switch]$AllowMultiSelect) { Adicionar-Tipo -AssemblyName System.Windows.Forms $openFileDialog = Novo objeto System.Windows.Forms.OpenFileDialog $openFileDialog.Title = $WindowTitle if (![string]::IsNullOrWhiteSpace($InitialDirectory)) { $openFileDialog.InitialDirectory = $InitialDirectory } $openFileDialog.Filter = $Filtro if ($AllowMultiSelect) { $openFileDialog.MultiSelect = $false } $openFileDialog.ShowHelp = $true # Sem esta linha a função ShowDialog() pode travar dependendo da configuração do sistema e da execução do console versus ISE. $openFileDialog.ShowDialog() > $null if ($AllowMultiSelect) { return $openFileDialog.Filenames } else { return $openFileDialog.Filename } } $file = Read-OpenFileDialog -WindowTitle "Seleção de arquivo PDF" -InitialDirectory '$path' -Filter "Arquivos PDF (*.pdf)|*.pdf" if (![string]::IsNullOrEmpty($file)) { Write-Host "Você selecionou o arquivo: $file" } else { "Dosya seçmediniz" } $path= "$file"|Caminho dividido cd $caminho [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") $objForm = Novo Objeto System.Windows.Forms.Form $objForm.Text = "VER FORMA" $objForm.Size = Novo Objeto System.Drawing.Size(700.400) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") { $x=$objListbox.SelectedItem;$objForm.Close() } }) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = Novo objeto System.Windows.Forms.Button $OKButton.Location = Novo objeto System.Drawing.Size(75.220) $OKButton.Size = Novo objeto System.Drawing.Size(75,23) $OKButton.Text = "EVET" $objForm.Controls.Add($OKButton) $OKButton.Add_Click({$x=$objListbox.SelectedItem;$objForm.Close()}) $CancelButton = Novo objeto System.Windows.Forms.Button $CancelButton.Location = Novo Objeto System.Drawing.Size(200.220) $CancelButton.Size = Novo objeto System.Drawing.Size(75,23) $CancelButton.Text = "İPTAL ET" $CancelButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($CancelButton) $objLabel = Novo Objeto System.Windows.Forms.Label $objLabel.Location = Novo Objeto System.Drawing.Size(10,20) $objLabel.Size = Novo Objeto System.Drawing.Size(480,20) $objLabel.Text = "LİSTEDEN SEÇİM YAPIN:" $objForm.Controls.Add($objLabel) $objListbox = Novo objeto System.Windows.Forms.Listbox $objListbox.Location = Novo Objeto System.Drawing.Size(10,40) $objListbox.Size = Novo objeto System.Drawing.Size(600.840) $objListBox.Font = "Arial Preto" pdftotext -eol dos -l 2 $ arquivo tmp.txt (gc tmp.txt) | ? {$_.trim() -ne "" } | definir conteúdo tmp.txt $i=pdfinfo "$arquivo" |grep -i título|sed -e 's/Título\:[ ]*//g' If (![string]::IsNullOrEmpty($i)) { $linha6=$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("$linha1") [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.Height =170 $objForm.Controls.Add($objListbox) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [vazio] $objForm.ShowDialog() $z= $objListbox.SelectedItems if ($z -ne ""){ $z= $z -replace '[^a-zA-Z0-9_ ]',"_" $z= $z -substitua '[ ]',"_" $z= $z -substitua '_{2,}',"_" $z= $z.Trim() Write-Host "dosya $z.pdf olarak kaydedildi" renomear item $ arquivo -novo nome $ z".pdf" } Else {Write-Host "isim değişmedi"} rm tmp.txt pausa $ x