【问题标题】:PowerShell: opening a file in default txt editorPowerShell:在默认的 txt 编辑器中打开文件
【发布时间】:2020-05-04 18:32:18
【问题描述】:

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

【问题讨论】:

    标签: powershell registry


    【解决方案1】:

    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...
    

    如果我不得不猜测为什么你的不工作,那是你提供的注册表项是系统使用的,而用户的默认编辑器存储在 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 并详细了解关联的工作原理。

    【讨论】:

    • 请注意StartStart-Process 命令的别名。您可能还想查看Invoke-Item 命令。
    • @MikeShepard 看起来Invoke-Item 在调用项目时使用默认操作,但我不想使用默认操作打开无扩展名主机文件,因为那不会在文本编辑器中打开。
    • 这个答案不能解决你的问题吗?它向您展示了如何使用用户文本编辑器打开文件,无论文件扩展名如何
    • @mbomb007 - 这是有道理的。只是想我会指出一个类似的命令。
    • @FoxDeploy 不,它不起作用。尝试自己将其运行到没有扩展名的文件中。我想用默认的 txt 编辑器打开一个非 TXT 文件。 start C:\Windows\System32\drivers\etc\hosts 会要求用户选择一个程序。
    猜你喜欢
    • 2013-07-16
    • 2013-02-28
    • 2012-11-17
    • 1970-01-01
    • 2016-09-05
    • 2012-08-03
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多