[英]How to get the filename from PowerShell GUI
我正在制作一個程序來通過 RegEdit 更改各種圖標,我想出了一個很好的 GUI,人們可以在其中選擇他們希望將文件更改為哪些 .ico 文件,這將是一個很好的接觸。 唯一的問題是,我對 PowerShell 一無所知,但操作 RegEdit 比使用 Python 容易得多。 而且我對 PowerShell GUI 了解較少。
Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{
InitialDirectory = [Environment]::GetFolderPath('Desktop')
Filter = 'Icons (*.ico)|*.ico'
}
$result = $FileBrowser.ShowDialog()
<#What do here?#>
最后一行,注釋所在的位置,我該怎么做才能獲取包含我剛剛搜索的文件名的字符串或任何數據類型? 對於任何好奇的人來說, $FileBrowser
只是提供了一個默認的 Windows 文件搜索窗口,我只是在上面設置了.ico
限制。 我調用什么方法? 我閱讀了有關DialogResult
一些內容,但我不明白該方法或小程序如何與ShowDialog
也不明白它是如何用於獲取文件名的(如果這是正確的解決方案)
$FileBrowser.ShowDialog()
返回一個枚舉值,告訴您用戶是確認( OK
)還是取消( Cancel
)對話框。
如果用戶確認, $FileBrowser.FileName
包含所選文件的完整路徑。
Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{
InitialDirectory = [Environment]::GetFolderPath('Desktop')
Filter = 'Icons (*.ico)|*.ico'
}
if ('OK' -eq $FileBrowser.ShowDialog()) {
"User chose: $($FileBrowser.FileName)"
}
else {
'User canceled the dialog.'
}
注意:您可以在 PowerShell 中使用字符串代替枚舉值,PowerShell 會自動轉換這些值; 您也可以顯式地使用枚舉值,但這會更加冗長; 例如, 'OK'
與[System.Windows.Forms.DialogResult]::OK
。
至於發現涉及的類型及其成員:
您可以在變量上使用Get-Member
cmdlet 來發現其值的 .NET 類型和該類型的成員。
要獲取有關給定 .NET 類型的更多信息,您可以簡單地在 google 上搜索它,或者以編程方式構建和打開 URL,如下所示:
$result = $FileBrowser.ShowDialog()
# Get the full name of the type of the value stored in $result
$fullTypeName = $result.GetType().FullName
# Assuming the type is one that comes with .NET,
# look up its documentation online (using the default browser).
Start-Process "https://docs.microsoft.com/en-us/dotnet/api/$fullTypeName"
這個答案包含一個名為Show-TypeHelp
的便利函數,它包裝了上述內容。
$Result | Get-Member
這會告訴你方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.