自动执行默认程序关联



我正在编写一个批处理脚本来自动更改特定文件类型的默认程序关联的过程。

文件类型定义完美,我使用此命令更改打开它们的默认程序,例如:

ftype giffile="%ProgramFiles%Windows Photo ViewerPhotoViewer.dll" "%1"

但是运行这个之后,什么都不会改变!

"giffile"只是我尝试更改默认程序关联的文件类型的一个例子。

我错过了什么?(如果有更好的解决方案,建议会很棒(

编辑:有了ftype,我就可以将程序添加到"打开方式"列表中,并且不会更改用于打开特定文件类型的默认程序。

哦,这很好,我花了几个小时才找到不当行为。为了测试这一点,我参考了.txt文件。 问题是,据我所知,您的数据类型已经使用另一个系统内部程序打开。就我而言,.txt连接到Worpad。因此,如果您弄乱注册表(没有其他事情是 assoc 和 ftype 做的(,无论如何,它都会回退到写字板。即使您在尝试时将其更改为另一个程序,它也会回退。

为了验证此bevaviour,您可以简单地考虑一个新的(未连接的(文件扩展名并尝试与它进行程序关联。例如,.log没有与我的系统关联,因此对.log文件执行以下步骤会立即按照我想要的方式更改其打开程序。如果日志已经为您连接,请考虑一些全新的内容。

所以Step1是不要让它回退到写字板。由于写字板是Windows的可选功能,因此我们首先必须卸载它。这在软件>程序>可选功能中是最简单的,并选择它进行卸载。 由于您更喜欢批处理脚本的编程方式,因此我可以推荐 dism 命令,可以通过将"删除"替换为"添加"来反转。

dism /Online /Remove-Capability /CapabilityName:Microsoft.Windows.WordPad~~~~0.0.1.0

在此之后,如果您双击 txtfile,默认情况下它将不再打开。 然后,正如对这个问题的许多不同答案中所述,您只需要更改 filextension 以按照您希望的方式运行即可调用

assoc .txt

这将给你"txtfile"作为返回值。然后将txt文件类型与您希望打开的程序类型连接。确保它是 txtfile 而不是文本文件。我有点困惑这两者中的哪一个对我来说,我认为Windows标准是txtfile。这里的错别字可能很丑陋。

ftype txtfile="exampleprogram.exe" "%1"
  • 请记住,在批处理中,您需要使用 %%1,因为第一个 % 被转义。如果省略该 %1,程序将在双击时启动,但不会显示
  • 打开的文件。
  • 使用引号只是因为大多数程序的文件路径中都有一个空格。
  • 我的示例卸载写字板。虽然将所有文件类型重定向到要替换.txt的程序应该不是问题,但请记住,默认情况下,.bat和.ini文件也由写字板打开,也许更多。

我包含了 txtfile 示例,因为这对我有用,您明确指出 giffile 只是一个示例。适应您的 giffile 差异是先摆脱照片应用程序。研究表明,这也可以通过编程方式完成。