我正试图找到一种方法,使用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的别称 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"
#...
如果你抓住 该值,现在你已经得到了与文本文件相关联的编辑器的真实路径。
要阅读更多关于这个主题的内容。这篇博文很不错 并详细介绍了社团的工作原理。