Программно связать расширения файлов с приложением в Windows

44

Я только недавно переустановил Windows, и при настройке среды я заметил, что все мои ассоциации для различных языков программирования, которые я редактирую в Notepad ++, прошли (естественно).

Я думаю о будущем, не было бы замечательно иметь какой-то пакетный файл, который мог бы автоматически связывать выбор расширений файлов с N ++ одним нажатием кнопки, вместо того, чтобы ждать, пока я не столкнусь со всеми этими расширениями, тогда пройти через навигацию к N ++ exe и т. д.

Я не могу сделать это с помощью Default Programsутилиты, которая поставляется с Windows 7, потому что она работает только с расширениями, которые были «встречены».

Так возможно ли программно ассоциировать расширения файлов с приложениями в Windows?

deed02392
источник
Должно ли решение быть PowerShell в соответствии с вашим тегом?
Ричард
1
Совсем нет, просто пытаюсь заинтересовать наркоманов командной строки Windows. :)
deed02392
Используйте Windows Easy Transfer для переноса настроек вашей системы, она встроена в Windows 7-Vista и может быть загружена для XP ... microsoft.com/download/en/details.aspx?id=7349
Moab
Это не вариант, так как оригинальная установка Windows больше не доступна.
deed02392
См. Также stackoverflow.com/q/212906/10245
Тим Абелл,

Ответы:

64

Используйте Ftype & Assoc, чтобы исправить это (и это можно использовать в сценариях).

Используйте Assoc, чтобы получить тип файла

>Assoc .txt

дает тебе:

.txt = txtfile

затем

>Ftype txtfile=C:\Program Files (x86)\Notepad++\notepad++.exe %1

Когда вы знаете тип файла, вы можете использовать Ftype, чтобы связать его с действием.

Это будет работать для файлов .php (просто поместите их в пакетный файл)

Assoc .php=phpfile
Ftype phpfile="C:\Program Files (x86)\Notepad++\notepad++.exe" %1

И вы можете скопировать эти строки, чтобы добавить другие текстовые файлы, как вы хотели бы.

uSlackr
источник
1
Интересно, когда я делаю >assoc .phpэто говорит, что не имеет файловой ассоциации? Кажется, то, что настраивается, когда вы указываете программу по умолчанию для открытия типа файла, не «регистрируется» таким образом. Почему это может быть?
deed02392
18
+1 для двух инструментов командной строки, которые я не знал, существовал.
Ян Бойд
1
Это решение позволяет открывать текстовые файлы в notepad ++, а не в ранее назначенной программе (notepad). Это не сделает Notepad ++ открытым, когда вы нажмете на новое незарегистрированное расширение файла (например, pl, py или c), как просил отправитель.
Ричард
1
@ deed02392 Вы можете добавить новую ассоциацию с ассоциацией «Assoc .php = phpfile» должен работать
uSlackr
2
Цель моего ответа - показать вам, как использовать assoc & ftype, а не писать пакетный файл для вас. Но я буду играть вместе
uSlackr
5

Вот скрипт, который работал для меня на Windows 10

$exts=@("txt","log","csproj","sql","xml","flobble")
echo "## setting up file associations"
foreach ($ext in $exts){
    $extfile=$ext+"file"
    $dotext="." + $ext
    cmd /c assoc $dotext=$extfile
    cmd /c "ftype $extfile=""C:\Program Files (x86)\Notepad++\notepad++.exe"" %1"
    echo ""
}
  • Необходимо запустить в окне PowerShell администратора (с повышенными правами).
  • Проводник сразу обновился и показал новые значки файлов.

https://gist.github.com/timabell/bc90e0808ec1cda173ca09225a16e194

Спасибо другим ответам за информацию, необходимую мне для этой работы.

Тим Абелл
источник
3

Как минимум, вам нужно создать один ключ реестра, который дает notepad ++ идентификатор и путь, а затем по одному для каждого расширения, которое вы хотите зарегистрировать для его использования.

Чтобы создать идентификатор и путь (отметьте путь, указывающий на правильное местоположение):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\notepad_pp]
@=""

[HKEY_CLASSES_ROOT\notepad_pp\shell]

[HKEY_CLASSES_ROOT\notepad_pp\shell\open]

[HKEY_CLASSES_ROOT\notepad_pp\shell\open\command]
@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\""

и затем продолжайте повторять следующий бит, один для каждого расширения (в этом примере, .plдля Perl):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Сохраните этот файл с расширением, .regи теперь вы сможете повторно связать все расширения, просто дважды щелкнув этот файл и подтвердив, что вы хотите импортировать записи в реестр.

Ричард
источник
1
Интересно, что я искал, и кажется, что Windows 7 делает, когда вы устанавливаете программу для загрузки, создает запись в HKCR \ ext_auto_file \ shell \ open \ command со значением "C: \ Program Files \ Notepad ++ \ notepad ++". .exe ""% 1 ". Откуда ты базировал свой?
deed02392
Это в основном то же самое, только с ext_auto_file, переименованным во что-то более значимое, и несколькими расширениями файлов, указывающими на одну запись.
Ричард