以编程方式将文件扩展名与Windows上的应用程序相关联


43

我最近刚刚重新安装了Windows,在设置环境时,我注意到我在Notepad ++中编辑的各种编程语言的所有关联都自然消失了。

我在考虑未来,拥有某种批处理文件,单击一下按钮即可自动将所选的文件扩展名与N ++相关联,这不是很盛大的做法,而不必等到我遇到所有这些扩展名之后经历导航到N ++ exe等的繁琐过程。

我无法Default Programs使用Windows 7附带的实用程序来执行此操作,因为它仅适用于“遇到”扩展名。

那么可以在Windows上以编程方式将文件扩展名与应用程序相关联吗?


根据您的标签,解决方案是否必须具有强大的功能?
理查德

1
根本没有,只是试图引起Windows命令行迷的兴趣。:)
deed02392 2012年

使用Windows轻松传送传输您的系统设置,它内置于Windows 7,Vista和可下载的XP ... microsoft.com/download/en/details.aspx?id=7349
摩押

这不是一个选择,因为原来的Windows安装不再可用。
deed02392

Answers:


63

使用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

然后,您可以复制这些行以添加其他基于文本的文件。


1
有趣的是,当我>assoc .php说它没有文件关联时?当您指定打开文件类型的默认程序时,似乎设置的内容没有以这种方式“注册”。为什么会这样呢?
deed02392

18
+1我不知道存在的两个命令行工具。
伊恩·博伊德

1
此解决方案使文本文件在notepad ++中打开,而不是在先前分配的程序(notepad)中打开。当您按提交者的要求单击新的未注册文件扩展名(例如pl,py或c)时,它不会使notepad ++打开。
理查德

1
@ deed02392,您可以添加与assoc的新关联'Assoc .php = phpfile'应该起作用
uSlackr

2
我回答的目的是向您展示如何使用assoc和ftype,而不是为您编写批处理文件。但我会继续玩
uSlackr 2012年

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 ++提供ID和路径,然后为您要注册使用的每个扩展名提供一个。

要创建ID和路径(请检查路径是否指向正确的位置):

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重命名为更有意义的名称,并且将多个文件扩展名指向一个条目。
理查德(Richard)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.