我想编写一个 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