本文目录导读:

Windows 系统 (PowerShell)
使用 Set-UserFTA 工具(推荐)
# 首先下载 Set-UserFTA 工具
# 下载地址:https://kolbi.cz/blog/2017/10/25/set-user-fta-user-choice-set-file-type-associations/
# 设置文件类型关联
# 格式:Set-UserFTA.exe 扩展名 程序ID
Set-UserFTA.exe .txt txtfile
Set-UserFTA.exe .pdf AcroExch.Document.DC
Set-UserFTA.exe .jpg jpegfile
# 批量修改多个扩展名
$associations = @{
".txt" = "txtfile"
".pdf" = "AcroExch.Document.DC"
".jpg" = "jpegfile"
".png" = "pngfile"
}
foreach ($ext in $associations.Keys) {
Set-UserFTA.exe $ext $associations[$ext]
}
使用注册表方式
# 批量修改文件打开方式(注册表方法)
$fileTypes = @(
@{Extension=".txt"; App="C:\Program Files\Notepad++\notepad++.exe"},
@{Extension=".pdf"; App="C:\Program Files\Adobe\Acrobat Reader\Acrobat\Acrobat.exe"},
@{Extension=".jpg"; App="C:\Program Files\IrfanView\i_view32.exe"}
)
foreach ($file in $fileTypes) {
# 创建文件扩展名关联
$ext = $file.Extension
$app = $file.App
# 设置打开方式
cmd /c "assoc $ext="
cmd /c "ftype $ext=`"$app`" `"%1`""
cmd /c "assoc $ext=$ext"
}
macOS 系统
使用 duti 工具(推荐)
#!/bin/bash
# 首先安装 duti
# brew install duti
# 批量设置文件打开方式
# 格式:duti -s 应用程序包ID 扩展名 all
# 设置所有 .txt 文件用 TextEdit 打开
duti -s com.apple.TextEdit .txt all
# 设置 .pdf 文件用 Adobe Reader 打开
duti -s com.adobe.Reader .pdf all
# 批量设置多个扩展名
declare -A apps
apps[".txt"]="com.apple.TextEdit"
apps[".pdf"]="com.adobe.Reader"
apps[".jpg"]="com.apple.Preview"
apps[".png"]="com.apple.Preview"
for ext in "${!apps[@]}"; do
app="${apps[$ext]}"
duti -s "$app" "$ext" all
done
使用 macOS 默认命令
#!/bin/bash # 使用 SwiftDefaultApps 工具 # 下载地址:https://github.com/Lord-Kamina/SwiftDefaultApps # 或使用 launchctl 和 LSHandler 设置 # 修改 LaunchServices 数据库 /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
Linux 系统
使用 xdg-mime 命令
#!/bin/bash
# 批量设置默认应用程序
# 设置 .txt 文件用 gedit 打开
xdg-mime default gedit.desktop text/plain
# 设置 .pdf 文件用 evince 打开
xdg-mime default evince.desktop application/pdf
# 批量设置
declare -A mime_types
mime_types=(
[".txt"]="text/plain"
[".pdf"]="application/pdf"
[".jpg"]="image/jpeg"
[".png"]="image/png"
[".html"]="text/html"
)
declare -A default_apps
default_apps=(
[".txt"]="gedit.desktop"
[".pdf"]="evince.desktop"
[".jpg"]="eog.desktop"
[".png"]="eog.desktop"
[".html"]="firefox.desktop"
)
for ext in "${!mime_types[@]}"; do
mime="${mime_types[$ext]}"
app="${default_apps[$ext]}"
xdg-mime default "$app" "$mime"
done
使用 desktop-file-install
#!/bin/bash # 创建自定义的 .desktop 文件 cat > /usr/local/share/applications/my-editor.desktop << EOF [Desktop Entry] Name=My Editor Exec=gedit %F Type=Application MimeType=text/plain; EOF # 更新 MIME 数据库 update-desktop-database # 设置默认关联 xdg-mime default my-editor.desktop text/plain
跨平台 Python 脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import platform
import subprocess
import sys
def set_file_association_windows(extension, app_path):
"""Windows 系统设置文件关联"""
try:
# 使用 ftype 和 assoc
file_type = extension[1:] + "file" # e.g., .txt -> txtfile
subprocess.run(f"ftype {file_type}={app_path} %1", shell=True, check=True)
subprocess.run(f"assoc {extension}={file_type}", shell=True, check=True)
print(f"设置 {extension} 关联成功")
except subprocess.CalledProcessError as e:
print(f"设置 {extension} 关联失败: {e}")
def set_file_association_macos(extension, bundle_id):
"""macOS 系统设置文件关联"""
try:
# 使用 duti
subprocess.run(["duti", "-s", bundle_id, extension, "all"], check=True)
print(f"设置 {extension} 关联成功")
except subprocess.CalledProcessError as e:
print(f"设置 {extension} 关联失败: {e}")
def set_file_association_linux(extension, mime_type, desktop_file):
"""Linux 系统设置文件关联"""
try:
subprocess.run(["xdg-mime", "default", desktop_file, mime_type], check=True)
print(f"设置 {extension} 关联成功")
except subprocess.CalledProcessError as e:
print(f"设置 {extension} 关联失败: {e}")
def batch_set_associations(associations):
"""批量设置文件关联"""
system = platform.system()
print(f"检测到系统: {system}")
if system == "Windows":
for ext, app in associations.items():
set_file_association_windows(ext, app)
elif system == "Darwin":
if not os.path.exists("/usr/local/bin/duti"):
print("请先安装 duti: brew install duti")
return
for ext, bundle_id in associations.items():
set_file_association_macos(ext, bundle_id)
elif system == "Linux":
for ext, (mime_type, desktop_file) in associations.items():
set_file_association_linux(ext, mime_type, desktop_file)
else:
print(f"不支持的系统: {system}")
if __name__ == "__main__":
# 示例配置
# Windows 示例
windows_associations = {
".txt": "C:\\Program Files\\Notepad++\\notepad++.exe",
".pdf": "C:\\Program Files\\Adobe\\Acrobat Reader DC\\Reader\\AcroRd32.exe",
".jpg": "C:\\Program Files\\IrfanView\\i_view32.exe"
}
# macOS 示例(需要 bundle ID)
macos_associations = {
".txt": "com.apple.TextEdit",
".pdf": "com.adobe.Reader",
".jpg": "com.apple.Preview"
}
# Linux 示例
linux_associations = {
".txt": ("text/plain", "gedit.desktop"),
".pdf": ("application/pdf", "evince.desktop"),
".jpg": ("image/jpeg", "eog.desktop")
}
# 根据系统使用相应的配置
system = platform.system()
if system == "Windows":
batch_set_associations(windows_associations)
elif system == "Darwin":
batch_set_associations(macos_associations)
elif system == "Linux":
batch_set_associations(linux_associations)
使用建议
- Windows: 推荐使用
Set-UserFTA工具,它操作简洁且不需要管理员权限 - macOS:
duti是最好用的工具,但需要先通过 Homebrew 安装 - Linux:
xdg-mime是最标准的方法,所有发行版都支持
注意事项
- 管理员权限: Windows 和 Linux 可能需要管理员权限
- 系统恢复: 建议在修改前备份注册表或系统设置
- 测试验证: 先在少量文件上测试,确认正确后再批量操作
- 程序路径: 确保指定的程序路径正确且程序已安装
选择哪种方法取决于您的操作系统和具体需求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播