获取文件名并在多选列表中使用它们

获取文件名并在多选列表中使用它们

我想编写一个 powershell 脚本来重命名 pdf 文件,使其符合各自的 pdftotext 行和/或 pdfinfo 标题。首先,我想在某个路径中创建一个多选 pdf 文件列表,然后从列表中选择一个要重命名的 pdf 文件。有人能帮忙创建一个文件名选择列表,可以通过 gci 命令进行管道传输吗?

答案1

感谢大家的评论。这是我的代码,用于从其相应的文本或元数据重命名 pdf 文件。该代码非常原始,因为我不是 IT 人员;只是从其他人那里借用和收集了一些代码。

$x = @()

函数 Read-OpenFileDialog([string]$WindowTitle, [string]$InitialDirectory, [string]$Filter = "所有文件 (*.*)|*.*", [switch]$AllowMultiSelect)
{  
    添加类型 -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.Filenames } else { 返回 $openFileDialog.Filename }
}
$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 = 新对象系统.Drawing.Size(700,400)
$objForm.StartPosition = “屏幕中心”

$objForm.KeyPreview = $True

$objForm.Add_KeyDown({如果 ($_.KeyCode -eq "Enter")
    {
$x=$objListbox.SelectedItem;$objForm.Close()
    }
    })

$objForm.Add_KeyDown({如果 ($_.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 = “事件”



$objForm.Controls.添加($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 = "取消"  
$CancelButton.Add_Click({$objForm.Close()})  
$objForm.Controls.Add($取消按钮)

$objLabel = 新对象 System.Windows.Forms.Label
$objLabel.Location = 新对象系统.Drawing.Size(10,20)
$objLabel.Size = 新对象系统.Drawing.Size(480,20)
$objLabel.Text = "列出以下内容:"
$objForm.Controls.添加($objLabel)

$objListbox = 新对象 System.Windows.Forms.Listbox
$objListbox.Location = 新对象System.Drawing.Size(10,40)
$objListbox.Size = 新对象系统.Drawing.Size(600,840)

$objListBox.Font = “Arial Black”


pdftotext -eol dos -l 2 $文件 tmp.txt  
(gc tmp.txt)|?{$_.trim() -ne“”} | 设置内容 tmp.txt  

$i=pdfinfo "$file" |grep -i 标题|sed -e 's/Title\:[ ]*//g'  
如果(![string]::IsNullOrEmpty($i))  
{  
$line6=$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.添加($objListbox)
$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()


$z= $objListbox.SelectedItems

如果 ($z -ne ""){  
$z= $z -replace '[^a-zA-Z0-9_ ]',"_"  
$z= $z -替换'[ ]',"_"  
$z= $z -替换'_{2,}',“_”  
$z=$z.Trim()
写入主机“dosya $z.pdf olarak kaydedildi”   
重命名项目 $file -newname $z".pdf"
}  
否则 {Write-Host "isim değişmedi"}  
rm tmp.txt  
暂停

$x

相关内容