ファイル名を取得し、複数選択リストで使用する

ファイル名を取得し、複数選択リストで使用する

それぞれの pdftotext 行および/または pdfinfo タイトルから PDF ファイルの名前を変更する PowerShell スクリプトを作成したいと考えています。まず、特定のパスにある PDF ファイルの複数選択リストを作成し、リストから名前を変更する PDF ファイルを選択します。GCI コマンドを通じてパイプできるファイル名からの選択リストを作成するのを手伝ってくれる人はいますか?

答え1

コメントをありがとうございます。以下は、それぞれのテキストまたはメタデータから PDF ファイルの名前を変更するコードです。私は IT の専門家ではないので、コードは非常に原始的です。他の人から借りて集めただけです。

$x = @()

function Read-OpenFileDialog([string]$WindowTitle, [string]$InitialDirectory, [string]$Filter = "すべてのファイル (*.*)|*.*", [switch]$AllowMultiSelect)
{  
    Add-Type -AssemblyName System.Windows.Forms
    $openFileDialog = 新しいオブジェクト System.Windows.Forms.OpenFileDialog
    $openFileDialog.Title = $WindowTitle  
    if (![string]::IsNullOrWhiteSpace($InitialDirectory)) { $openFileDialog.InitialDirectory = $InitialDirectory }
    $openFileDialog.Filter = $Filter
    $AllowMultiSelect の場合、$openFileDialog.MultiSelect = $false になります。
    $openFileDialog.ShowHelp = $true # この行がないと、システム構成とコンソールからの実行か ISE からの実行かに応じて、ShowDialog() 関数がハングする可能性があります。
    $openFileDialog.ShowDialog() > $null
    if ($AllowMultiSelect) { return $openFileDialog.Filenames } else { return $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 = 新しいオブジェクト System.Drawing.Size(700,400)
$objForm.StartPosition = "画面中央"

$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 = New-Object System.Drawing.Size(200,220)  
$CancelButton.Size = 新しいオブジェクト System.Drawing.Size(75,23)  
$CancelButton.Text = "キャンセル"  
$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 = "リストされているセクションの説明:"
$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 "" } | tmp.txt の内容を設定する  

$i=pdfinfo "$file" |grep -i title|sed -e 's/Title\:[ ]*//g'  
(![文字列]::IsNullOrEmpty($i) の場合)  
{  
$line6=$i  
}  



$line1= (Get-Content tmp.txt)[0]
$line2= (Get-Content tmp.txt)[1]
$line3= (Get-Content tmp.txt)[2]
$line4= (Get-Content tmp.txt)[3]
$line5= (Get-Content 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()})
[void] $objForm.ShowDialog()


$z = $objListbox.選択された項目

($z -ne "") の場合{  
$z= $z - '[^a-zA-Z0-9_ ]',"_" を置き換えます  
$z= $z - '[ ]',"_" を置き換えます  
$z= $z - '_{2,}'、"_" を置き換えます  
$z= $z.トリム()
ホストへの書き込み「dosya $z.pdf は kaydedildi です」   
名前を変更-アイテム $file -newname $z".pdf"
}  
それ以外の場合 {Write-Host は "isim değişmedi" です}  
rm tmp.txt  
一時停止

$x

関連情報