
我想製作一個 powershell 腳本來從各自的 pdftotext 行和/或 pdfinfo 標題重命名 pdf 檔案。首先,我想在某個路徑中建立一個pdf檔的多選列表,然後從列表中選擇一個我想要重新命名的pdf檔。任何人都可以幫助從可以透過 gci 命令傳送的檔案名稱中建立選擇清單嗎?
答案1
感謝您的所有評論。這是我的程式碼,用於根據相應的文字或元資料重命名 pdf 檔案。由於我不是IT人,所以程式碼非常原始;只是從別人那裡借來和收集的。
$x = @() function Read-OpenFileDialog([string]$WindowTitle, [string]$InitialDirectory, [string]$Filter = "所有檔案 (*.*)|*.*", [switch]$AllowMultiSelect) { 新增類型-AssemblyName System.Windows.Forms $openFileDialog = 新物件 System.Windows.Forms.OpenFileDialog $openFileDialog.Title = $WindowTitle if (![string]::IsNullOrWhiteSpace($InitialDirectory)) { $openFileDialog.InitialDirectory = $InitialDirectory } $openFileDialog.Filter = $Filter if ($AllowMultiSelect) { $openFileDialog.MultiSelect = $false } $openFileDialog.ShowHelp = $true # 如果沒有此行,ShowDialog() 函數可能會掛起,具體取決於系統配置以及從控制台與 ISE 運行。 $openFileDialog.ShowDialog() > $null if ($AllowMultiSelect) { 回傳 $openFileDialog.Filenames } else { 回傳 $openFileDialog.Filename } } $file = Read-OpenFileDialog -WindowTitle "PDF Dosyası seçin" -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 = "VERI FORMU" $objForm.Size = 新物件 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 = 新物件 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 = 新物件 System.Windows.Forms.Button $CancelButton.Location = 新物件 System.Drawing.Size(200,220) $CancelButton.Size = 新物件 System.Drawing.Size(75,23) $CancelButton.Text = "IPTAL ET" $CancelButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($CancelButton) $objLabel = 新物件 System.Windows.Forms.Label $objLabel.Location = 新物件 System.Drawing.Size(10,20) $objLabel.Size = 新物件 System.Drawing.Size(480,20) $objLabel.Text = "聆聽 SEÇIM YAPIN:" $objForm.Controls.Add($objLabel) $objListbox = 新物件 System.Windows.Forms.Listbox $objListbox.Location = 新物件System.Drawing.Size(10,40) $objListbox.Size = 新物件System.Drawing.Size(600,840) $objListBox.Font = "Arial 黑色" pdftotext -eol dos -l 2 $文件 tmp.txt (gc tmp.txt) | ? {$_.trim() -ne "" } | {$_.trim() -ne "" } |設定內容 tmp.txt $i=pdfinfo "$file" |grep -i title|sed -e 's/Title\:[ ]*//g' If (![string]::IsNullOrEmpty($i)) { $第6行=$i } $line1= (取得內容 tmp.txt)[0] $line2= (取得內容 tmp.txt)[1] $line3= (取得內容 tmp.txt)[2] $line4= (取得內容 tmp.txt)[3] $line5= (取得內容 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()}) [無效] $objForm.ShowDialog() $z= $objListbox.SelectedItems 如果($z-ne“”){ $z= $z -替換 '[^a-zA-Z0-9_ ]',"_" $z= $z - 替換 '[ ]',"_" $z= $z - 替換 '_{2,}',"_" $z= $z.Trim() 寫入主機“dosya $z.pdf olarak kaydedildi” 重新命名項目 $file -newname $z".pdf" } 否則{寫入主機“isim değişmedi”} rm tmp.txt 暫停 $x