PowerShell:在默认的txt编辑器中打开一个文件。

问题描述 投票:0回答:1

我正试图找到一种方法,使用PowerShell在默认的文本编辑器中打开一个非txt文件(在本例中,hosts文件)。

在看到以下内容后,我取得了一些进展 这个Reddit帖子但是 $txt_editor 结果总是返回Notepad.exe,尽管Notepad++是我默认的txt文件编辑器。

$hosts_file = "$env:windir\System32\drivers\etc\hosts"
$txt_editor = ((Get-ItemProperty -Path 'Registry::HKEY_CLASSES_ROOT\txtfile\shell\open\command').'(Default)').trimend(" %1")
Start-Process -FilePath $txt_editor -Verb Runas -ArgumentList $hosts_file

这也返回Notepad.exe。

(Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithList' -Name a).a

如果我在注册表编辑器中查看上面的位置,我确实看到Notepad++被列在了关键的 d但我不知道如何只看注册表键就知道默认的文本编辑器是什么,因为我在Reddit上看到的两个解决方案都不起作用。

我使用的是Windows 10,我正在寻找的解决方案将返回实际的默认文本编辑器文件位置,这样就可以用它来打开一个文件,如上图所示。

powershell registry
1个回答
1
投票

启动命令(这是PowerShell的别称 Start-Process)将启动其默认编辑器中的任何文件。

start .\MyCoolbmp.bmp
#Opens in MSPaint

start .\SomeNotes.txt
#Opens in Notepad

start .\SomeJason.json
#Opens in Visual Studio, go ahead and grab a coffee...

如果要我猜测为什么你的注册表键不工作,那就是你给的注册表键是用于系统的,而用户的默认编辑器是存储在HKEY_CURRENT_USER蜂巢中的,从Windows 7开始,在这个路径上。Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice'.

这里是相关的值。

$txtKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice"
Get-ItemProperty -Path $txtKey | tee-object -variable txtPath

Hash         : noCJnt8yX5Y=
ProgId       : VSCode.txt

这与HKCR:\\Applications中的信息有关,在那里可以找到真正的路径。

get-itemproperty Registry::\HKEY_CLASSES_ROOT\$($txtPath.ProgId)\shell\open\command


(default)    : "C:\Program Files\Microsoft VS Code\Code.exe" "%1"
#...

如果你抓住 该值,现在你已经得到了与文本文件相关联的编辑器的真实路径。

要阅读更多关于这个主题的内容。这篇博文很不错 并详细介绍了社团的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.