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

时间:2020-05-04 18:32:18

标签: powershell registry

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

看到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,而我正在寻找的解决方案将返回实际的默认文本编辑器文件位置,以便可以如上所示使用它来打开文件。

1 个答案:

答案 0 :(得分:1)

“开始”命令(是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...

如果我不得不猜测为什么您的注册表不起作用,那是因为您提供的注册表项是系统使用的注册表项,而用户的默认编辑器是从Windows 7及更高版本存储在HKEY_CURRENT_USER配置单元中,在此路径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"
#...

如果您那个(默认)值,现在您已经有了与文本文件关联的编辑器的真实路径。

要进一步了解该主题,请this blog post is pretty good,并详细介绍关联的工作方式。