用于更改 Windows 10 上 PDF 文件文件类型关联的脚本

用于更改 Windows 10 上 PDF 文件文件类型关联的脚本

我如何创建一个如下所示的简单文件来更改 Windows 中 PDF 的关联?

运行文件 1 → 将 PDF 更改为 Sumatra PDF Reader
运行文件 2 → 将 PDF 更改为 FoxIt Phantom

有没有简单的解决方案?

答案1

首先获取该命令的结果:

assoc .pdf

它给出了与文档类型之间的当前关联.pdf。在我的例子中,输出为:

FoxitPhantomPDF.文档

根据此输出,我创建了两个.bat文件:

ftype FoxitPhantomPDF.Document="C:\Program Files\SumatraPDF\SumatraPDF.exe" "%1"

和:

ftype FoxitPhantomPDF.Document="C:\Program Files (x86)\Foxit Software\Foxit PhantomPDF\FoxitPhantomPDF.exe" "%1"

您必须.bat以管理员身份运行这些文件。

抱歉,但是那里有一个问题:

  • 当我在 Windows 中打开管理员提示符并键入上述命令时,它们工作正常(!),但是当我右键单击 bat 文件并以管理员身份运行它们时,它们不起作用!

答案2

不幸的是,上述答案已过时,不再适用于 Windows 10 18xx 或 19xx。我发现以管理员或非管理员用户身份运行的是“SetUserFTA.exe”,具体说明如下:

  1. 下载“SetUserFTA.exe”并将其放在一个文件夹中,例如“D:\tools\SetDefaults\”。

    直接链接:http://kolbi.cz/SetUserFTA.zip

    来源:http://kolbi.cz/blog/2017/10/25/setuserfta-userchoice-hash-defeated-set-file-type-associations-per-user/

  2. 在同一个文件夹(“D:\tools\SetDefaults\”)中创建一个名为“my_config.txt”的文本文件,其中包含所需的关联,在此示例中:pdf 到 Okular 和 txt 到 Notepad++:

.pdf, applications\okular.exe
.txt, applications\notepad++.exe
  1. 在同一个文件夹 ("D:\tools\SetDefaults\") 中创建一个 bat 文件 "SetDefaults.bat",其中包含:
@echo off
D:
cd D:\tools\SetDefaults\
echo %DATE%-%TIME%: SetuserFTA is running >> LogFile.txt
SetuserFTA.exe  my_config.txt >> LogFile.txt
echo %DATE%-%TIME%: SetuserFTA is finnished. Restarting explorer... >> LogFile.txt
taskkill /F /IM explorer.exe
start explorer.exe
::pause
  1. 通过以下三种方式之一设置在登录时调用的“SetDefaults.bat”脚本:

    4a. 如果您具有管理员权限,请将 bat 文件复制到 C:\WINDOWS\System32\GroupPolicy\User\Scripts\Logon

    4b. 或者,如果您具有管理员权限,请从开始菜单输入并打开 gpedit.msc -> 本地计算机策略 -> 用户配置 -> Windows 设置 -> 脚本(登录/注销)-> 登录 -> 选择添加,然后设置:脚本名称 = D:\tools\SetDefaults\SetDefaults.bat 脚本参数 = 留空

    4c. 或者如果您没有管理员权限,请转到“C:\Users\Your.Name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\”并创建指向“D:\tools\SetDefaults\SetDefaults.bat”的快捷方式“SetDefaults.lnk”

注意:对于 4a 和 4b(如果您具有管理员权限),不需要终止并重新启动 explorer,因为从那里开始脚本被调用得更早。但是对于 4c,这是必需的,因为脚本是在 explorer 运行后约 10 秒调用的。

为了进行调试,请检查 D:\tools\SetDefaults\LogFile.txt ,其内容如下:

11/06/2020-14:06:34.03: SetuserFTA is running 
11/06/2020-14:06:34.06: SetuserFTA is finnished. Restarting explorer... 

注意:有一个开源(在 Power Basic 中)替代方案,我尚未尝试过: https://danysys.com/set-file-type-association-default-application-command-line-windows-10-userchoice-hash-internal-method/

选修的:要设置默认浏览器,请下载“SetDefaultBrowser.exe”并放在同一文件夹中。

直接链接:http://kolbi.cz/SetDefaultBrowser.zip

来源:http://kolbi.cz/blog/2017/11/10/setdefaultbrowser-设置-默认浏览器-每个用户在windows-10-and-server-2016-build-1607/

然后增强上面的“SetDefaults.bat”,如下所示:

@echo off
D:
cd D:\tools\totalcmd\Tools\SysBackupBcdBootUSBFormatPart\SetDefaults\
taskkill /F /IM explorer.exe
echo %DATE%-%TIME%: Killing explorer. Run SetuserFTA >> LogFile.txt
SetuserFTA.exe  my_config.txt >> LogFile.txt
echo %DATE%-%TIME%: SetuserFTA is finnished. Restarting explorer... >> LogFile.txt
start explorer.exe
timeout /T 2
SetDefaultBrowser.exe chrome  >> LogFile.txt
echo %DATE%-%TIME%: SetDefaultBrowser is finnished. >> LogFile.txt
::pause

请注意,浏览器设置必须在重新启动资源管理器后进行,这就是 2 秒延迟的原因......

答案3

在 Win 8 之前的版本中,应用程序可以通过操纵注册表来设置文件类型/协议的默认处理程序,这意味着您可以轻松使用脚本或组策略来操纵注册表。然而,在 Win 8 中,注册表更改通过哈希值(每个用户和应用程序独有)进行验证,该哈希值可检测应用程序的篡改行为。如果没有有效的哈希值,我们将忽略注册表中的默认值。

http://kolbi.cz/blog/2017/10/25/setuserfta-userchoice-hash-defeated-set-file-type-associations-per-user/

答案4

这个 .bat 适用于右键点击在 bat 文件上以管理员身份运行

:: Run them as administrator!!!!


:: Windows-1251
chcp 1251

cls
color 0e

:: For works right click on the bat files and run them as administrator. Begin
@SETLOCAL ENABLEEXTENSIONS
@cd /d "%~dp0"
:: For works right click on the bat files and run them as administrator. End

::: File accociations
assoc .pdf=SumatraPDF.pdf
ftype SumatraPDF.pdf="C:\Program Files\SumatraPDF\SumatraPDF.exe" "%1"

相关内容