Чтобы связать расширение файла с конкретной программой

Я пытаюсь связать определенные расширения файлов с конкретными программами. Например, когда я нажимаю Enter в файле .txt, он должен открываться в Sublime Text. Или может быть в Vim. Или может быть в Хроме.

Мне нужно добиться этого с помощью командной строки. На первый взгляд, это может быть достигнуто следующим образом:

FTYPE txtfile=C:\Program Files\Google\Chrome\Application\chrome.exe "%1"
ASSOC .txt=txtfile

Но на самом деле мне это ничего не дает: файлы .txt открываются в Sublime Text, а не в браузере.

Что я делаю неправильно?


person john c. j.    schedule 30.03.2020    source источник
comment
Почти уверен, что вам нужно поставить кавычки пути с пробелами в них. Вы выполняете это из пакетного файла или командной строки? Если из пакетного файла, вам нужно удвоить символы процента, чтобы избежать их.   -  person Squashman    schedule 30.03.2020
comment
Вы заметите, что это должно быть ASSOC .txt=txtfile за которым следует FTYPE txtfile="C:\Program Files\Google\Chrome\Application\chrome.exe" "%1"   -  person T3RR0R    schedule 30.03.2020
comment
@ T3RR0R Вы уверены, что это работает? Вставил первую команду, нажал Enter, вставил вторую команду, нажал Enter. Нет эффекта.   -  person john c. j.    schedule 30.03.2020
comment
Пробовал с правами администратора и без.   -  person john c. j.    schedule 30.03.2020


Ответы (2)



Попробуй это:

@echo off && setlocal EnableDelayedExpansion

title <nul && title ...\%~nx0 && cd /d "%~dp0" && mode 50,6 && echo/
for %%i in (ProgramFiles,ProgramFiles(x86^),ProgramW6432)do if /i defined %%~i (
    for /f tokens^=^* %%z in ('%__APPDIR__%where.exe /r "!%%~i!" "chrome.exe" 2^>nul
    ')do set "_path_chrome=%%~z" && goto :_reg_add_: 
     )

:_reg_add_:
>nul (
"%__APPDIR__%reg.exe" add "HKCU\Software\Classes\.txt" /ve /d "txtfile" /f
"%__APPDIR__%reg.exe" add "HKCU\Software\Classes\txtfile" /ve /d "Text Document" /f
"%__APPDIR__%reg.exe" add "HKCU\Software\Classes\txtfile\shell\open\command" /ve /d "\"!_path_chrome:\=\\!\" \"file:///%%L\"" /f
) 2>nul && endlocal || (endlocal && echo/Something is very wrong here^!!) & %__APPDIR__%timeout.exe -1

Используйте цикл for и получите полный путь к Chrome.exe, сохраните его в переменной и замените \ на \\ для добавления значение пути в регистре...

Добавьте записи в реестр Windows с помощью этого макета:

1) Используйте %%L вместо %L

2) Используйте \"file:///%%L\" вместо \"%L\"

3) Используйте "\"!_path_chrome:\=\\!\" вместо \"!_path_chrome\"

Использование: \"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\"

Не: \"C:\Program Files\Google\Chrome\Application\chrome.exe\"

person It Wasn't Me    schedule 01.04.2020

Я ожидаю, что следующее будет работать как задумано, несмотря на мое нежелание советовать это.

пакетный файл< /эм>

@"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\.txt" /VE /D "txtfile" /F > NUL
@"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\txtfile" /VE /D "Text Document" /F > NUL
@"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\txtfile\shell\open\command" /VE /D "\"%ProgramFiles%\Google\Chrome\Application\chrome.exe\" \"%%L\"" /F > NUL

cmd

"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\.txt" /VE /D "txtfile" /F > NUL
"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\txtfile" /VE /D "Text Document" /F > NUL
"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\txtfile\shell\open\command" /VE /D "\"%ProgramFiles%\Google\Chrome\Application\chrome.exe\" \"%L\"" /F > NUL
person Compo    schedule 30.03.2020