PowerShell: открытие файла в текстовом редакторе по умолчанию - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь найти способ открыть нетекстовый файл (в данном случае файл hosts) в текстовом редакторе по умолчанию с помощью PowerShell.

Я добился определенного прогресса после просмотра этого Reddit post , но результат $txt_editor всегда возвращает Notepad.exe, хотя Notepad ++ является моим редактором по умолчанию для текстовых файлов.

$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 Ответ

1 голос
/ 04 мая 2020

Команда «Пуск» (которая является псевдонимом для 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"
#...

Если вы захватите это (по умолчанию) значение , теперь у вас есть верный путь для редактора, связанного с текстовыми файлами.

Чтобы прочитать немного больше о топи c, , это сообщение в блоге довольно неплохо и подробно расскажем о том, как работают ассоциации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...