PowerShell:在默认txt编辑器中打开文件

hivapdat  于 2023-05-07  发布在  Shell
关注(0)|答案(1)|浏览(261)

我试图找到一种方法来打开一个 * 非txt * 文件(在这种情况下,主机文件)在默认的文本编辑器使用PowerShell。
在看到this Reddit post之后,我取得了一些进展,但是$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,我正在寻找的解决方案将返回实际的默认文本编辑器文件位置,这样就可以用它来打开一个文件,如上图所示。

gstyhher

gstyhher1#

Start命令(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"
#...

如果您获取 *that(Default)值 *,现在您就得到了与文本文件关联的编辑器的真实路径。
要阅读更多关于这个主题的内容,请参阅this blog post is pretty good,并详细介绍关联如何工作。

相关问题