取得檔案名稱並在多選清單中使用它們

取得檔案名稱並在多選清單中使用它們

我想製作一個 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

相關內容