我如何创建一个如下所示的简单文件来更改 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”,具体说明如下:
下载“SetUserFTA.exe”并将其放在一个文件夹中,例如“D:\tools\SetDefaults\”。
在同一个文件夹(“D:\tools\SetDefaults\”)中创建一个名为“my_config.txt”的文本文件,其中包含所需的关联,在此示例中:pdf 到 Okular 和 txt 到 Notepad++:
.pdf, applications\okular.exe
.txt, applications\notepad++.exe
- 在同一个文件夹 ("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
通过以下三种方式之一设置在登录时调用的“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
然后增强上面的“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 中,注册表更改通过哈希值(每个用户和应用程序独有)进行验证,该哈希值可检测应用程序的篡改行为。如果没有有效的哈希值,我们将忽略注册表中的默认值。
答案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"