This question 显示了一个Powershell脚本来生成打开的文件资源管理器窗口的列表及其路径。我的目标是捕获当前打开的资源管理器窗口集,并写出一个CMD文件,命令如下: C:\WINDOWS\explorer.exe /e、“C:\ open \this\文件夹”
因此,我希望有完整的路径和文件夹名称的正常路径符号。这是资源管理器Windows的标题栏中显示的内容:“C:\open\ This \收藏夹”
拟议的守则是:
function Get-WindowTitle($handle) {
Get-Process |
Where-Object { $_.MainWindowHandle -eq $handle } |
Select-Object -Expand MainWindowTitle
$app = New-Object -COM 'Shell.Application'
$app.Windows() |
Select-Object LocationURL, @{n='Title';e={Get-WindowTitle $_.HWND}}
如上所示,LocationURL以转义的URL样式提供了完整的路径:
file:///C:/open/this/Favorite%20%folder"
@{n='Title';e={Get-WindowTitle $_.HWND}}组件生成一个列"Title“,该列被截断为5个字符:
C:\...
一个资源管理器窗口的完整输出如下:
LocationURL Title
----------- -----
file:///C:/open/this/Favorite%20%folder C:...
我发现我可以通过在字符串'Title‘中填充许多空格来避免截断。该字符串的宽度似乎决定了输出的最大宽度。不过,我发现打开的资源管理器窗口中只有大约60%列出了路径。剩下的只是空白行。
我尝试了"$app.Windows() \x{e76f}选择对象LocationName",但是输出只包含资源管理器文件夹名,而不是显示在资源管理器标题中的完整路径和文件夹。
另一个谜是为什么脚本运行这么慢。如果打开了10个资源管理器窗口,脚本将运行30秒,每次路径运行大约3秒。
对于此脚本:
function Get-WindowTitle($handle) {
Get-Process |
Where-Object { $_.MainWindowHandle -eq $handle } |
Select-Object -Expand MainWindowTitle
$app = New-Object -COM 'Shell.Application'
$app.Windows() |
Select-Object LocationName,@{n=' ------------Title---------------- ';e={Get-WindowTitle $_.HWND}}
这是输出(为了隐私起见,有些人用*进行编辑)
PS C:\E***> .\OpenExplorer.ps1
LocationName ------------Title----------------
------------ ----------------------------------------------------------------------------------
2019-07
Ame****
2019 Priv...
2019-10-3... C:\E\Event Presentations\2019-10-31 Priv**********bcast
E C:\E
5G Brief ... C:\E\Tech************ing\5G Brief (2018)
36 Series...
2019 DE* ... C:\E\16*****N\2019 DE*******************
Newsletters C:\E\Newsletters
Reports C:\E\Tech************ing\Reports
2019-10-2... C:\E\16**********s\2019-10-29 *********************
2019-11 C:\Data\Docs\Stand*********24\2019-11
UB****
Financial... C:\E\Financ************
Expenses C:\E\Internal\Expenses