首页 > 解决方案 > 自动化默认程序关联

问题描述

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

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

ftype giffile="%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll" "%1"

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

“giffile”只是我试图更改默认程序关联的文件类型的一个示例。

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

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

标签: batch-filewindows-10

解决方案


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

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

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

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

在此之后,如果您双击一个 txt 文件,它将不再默认打开。然后,正如对该问题的许多不同答案所述,您只需将文件扩展名更改为您希望的行为即可调用

assoc .txt

这将为您提供“txtfile”作为返回值。然后将 txtfile 类型与您希望打开的程序类型连接起来。确保它是 txtfile 而不是 textfile。我有点困惑这两者中的哪一个对我来说,我认为 Windows 标准是 txtfile。错别字在这里可能很难看。

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

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


推荐阅读