
Quiero crear un script de PowerShell para cambiar el nombre de los archivos PDF a partir de sus respectivas líneas de pdf a texto y/o título de pdfinfo. Primero, quiero hacer una lista de opciones múltiples de archivos pdf en una ruta determinada y seleccionar un archivo pdf de la lista cuyo nombre quiero cambiar. ¿Alguien podría ayudarme a hacer una lista de opciones a partir de nombres de archivos que se pueden canalizar a través del comando gci?
Respuesta1
Gracias por todos los comentarios. Aquí está mi código para cambiar el nombre de un archivo pdf a partir de su respectivo texto o metadatos. El código es muy primitivo porque no soy un informático; simplemente tomó prestado y reunió piezas de otros.
$x = @() función Read-OpenFileDialog([cadena]$WindowTitle, [cadena]$InitialDirectory, [cadena]$Filter = "Todos los archivos (*.*)|*.*", [switch]$AllowMultiSelect) { Agregar tipo -AssemblyName System.Windows.Forms $openFileDialog = Nuevo-Objeto System.Windows.Forms.OpenFileDialog $openFileDialog.Title = $Título de la ventana if (![cadena]::IsNullOrWhiteSpace($InitialDirectory)) { $openFileDialog.InitialDirectory = $InitialDirectory } $openFileDialog.Filter = $Filtro si ($AllowMultiSelect) { $openFileDialog.MultiSelect = $false } $openFileDialog.ShowHelp = $true # Sin esta línea, la función ShowDialog() puede bloquearse según la configuración del sistema y si se ejecuta desde la consola o desde ISE. $openFileDialog.ShowDialog() > $nulo if ($AllowMultiSelect) { devolver $openFileDialog.Filenames } else { devolver $openFileDialog.Filename } } $file = Read-OpenFileDialog -WindowTitle "Sesión de archivo PDF" -InitialDirectory '$path' -Filter "Archivos PDF (*.pdf)|*.pdf" if (![string]::IsNullOrEmpty($file)) { Write-Host "Seleccionó el archivo: $file" } else { "Dosya seçmediniz" } $ruta= "$archivo"|Ruta dividida cd $ruta [vacío] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [vacío] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") $objForm = Nuevo-Objeto System.Windows.Forms.Form $objForm.Text = "VERİ FORMU" $objForm.Size = Sistema de nuevo objeto.Drawing.Size(700,400) $objForm.StartPosition = "Pantalla Central" $objForm.KeyPreview = $Verdadero $objForm.Add_KeyDown({si ($_.KeyCode -eq "Entrar") { $x=$objListbox.SelectedItem;$objForm.Close() } }) $objForm.Add_KeyDown({si ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = Nuevo-Objeto System.Windows.Forms.Button $OKButton.Ubicación = Sistema de nuevo objeto.Dibujo.Tamaño(75,220) $OKButton.Size = Nuevo-Objeto System.Drawing.Size(75,23) $OKButton.Text = "EVET" $objForm.Controls.Add($OKButton) $OKButton.Add_Click({$x=$objListbox.SelectedItem;$objForm.Close()}) $CancelButton = Nuevo objeto System.Windows.Forms.Button $CancelButton.Location = Nuevo-Objeto System.Drawing.Size(200,220) $CancelButton.Size = Sistema de nuevo objeto.Dibujo.Tamaño(75,23) $CancelButton.Text = "İPTAL ET" $CancelButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($CancelButton) $objLabel = Nuevo-Objeto System.Windows.Forms.Label $objLabel.Location = Sistema de nuevo objeto.Dibujo.Tamaño(10,20) $objLabel.Size = Sistema de nuevo objeto.Dibujo.Tamaño(480,20) $objLabel.Text = "LİSTEDEN SEÇİM YAPIN:" $objForm.Controls.Add($objLabel) $objListbox = Nuevo-Objeto System.Windows.Forms.Listbox $objListbox.Ubicación = Sistema de nuevo objeto.Dibujo.Tamaño(10,40) $objListbox.Size = Sistema de nuevo objeto.Dibujo.Tamaño(600,840) $objListBox.Font = "Arial Negro" pdftotext -eol dos -l 2 $archivo tmp.txt (gc tmp.txt) | ? {$_.trim() -ne "" } | establecer contenido tmp.txt $i=pdfinfo "$archivo" |grep -i título|sed -e 's/Título\:[ ]*//g' Si (![cadena]::IsNullOrEmpty($i)) { $línea6=$yo } $línea1= (Obtener contenido tmp.txt)[0] $línea2= (Obtener contenido tmp.txt)[1] $línea3= (Obtener contenido tmp.txt)[2] $line4= (Obtener contenido tmp.txt)[3] $línea5= (Obtener contenido tmp.txt)[4] [nulo] $objListbox.Items.Add("$line1") [nulo] $objListbox.Items.Add("$line2") [nulo] $objListbox.Items.Add("$line3") [nulo] $objListbox.Items.Add("$line4") [nulo] $objListbox.Items.Add("$line5") [nulo] $objListbox.Items.Add("$line6") $objListbox.Altura =170 $objForm.Controls.Add($objListbox) $objForm.Topmost = $Verdadero $objForm.Add_Shown({$objForm.Activate()}) [nulo] $objForm.ShowDialog() $z= $objListbox.Elementos seleccionados si ($z -ne ""){ $z= $z -reemplazar '[^a-zA-Z0-9_ ]',"_" $z= $z -reemplazar '[ ]',"_" $z= $z -reemplazar '_{2,}',"_" $z= $z.Recortar() Write-Host "dosya $z.pdf olarak kaydedildi" cambiar el nombre del elemento $archivo -nuevo nombre $z".pdf" } De lo contrario {Write-Host "isim değişmedi"} rm tmp.txt pausa $x