本帖最后由 louissgd 于 2023-8-19 21:41 编辑
对于WIN10和WIN11 assoc和ftype命令似乎只能更改未有任何程序关联的新类型
对于已经有程序关联的类型这两个命令基本不能成功
WIN10开始用户选择打开方式需要用到一个hash值,在这个键下面
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.xxx\UserChoice
上面的XXX指代要改的后缀名
国外有人研究过这个 做了一个小程序 可以方便的帮你设置HASH值 程序叫SetUserFTA
下载地址:https://pan.baidu.com/s/1JpAWVkUTSp_1i2LPQLpWDw?pwd=62zb
那么利用SetUserFTA我们可以方便的用批处理来改文件关联
我这里以媒体文件修改 3g2 和 3gpp 为例 关联的程序是abc.exe 图标是3g2.ico 和 3gpp.ico 写了一个批处理
注意下面涉及到路径的地方都要用完整路径 我这里省略了路径 批处理请另存为ANSI编码格式- @echo off
- ::启用管理员权限
- (PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
- echo 正在设置关联 请稍候...
- for %%i in (3g2 3gpp) do (
- ::在HKEY_CLASSES_ROOT建立文件类型
- REG ADD "HKCR\.%%i" /v "" /t REG_SZ /d "abc.%%i" /f /reg:64>nul
- ::建立文件类型说明 如不需要说明可删除下面一行 如果有不同的说明请删除 直接使用37-41行的代码
- REG ADD "HKCR\abc.%%i" /v "" /t REG_SZ /d "MPEG4 文件" /f /reg:64>nul
- ::设置关联图标 如无图标可删除下面一行
- REG ADD "HKCR\abc.%%i\DefaultIcon" /v "" /t REG_SZ /d "%%i.ico" /f /reg:64>nul
- ::设置打开方式
- REG ADD "HKCR\abc.%%i\shell\open\command" /v "" /t REG_SZ /d "\"abc.exe\" \"%%1\"" /f /reg:64>nul
-
- ::在HKEY_LOCAL_MACHINE\SOFTWARE\Classes建立文件类型
- REG ADD "HKLM\SOFTWARE\Classes\%%i" /v "" /t REG_SZ /d "abc.%%i" /f /reg:64>nul
- ::建立文件类型说明 如不需要说明可删除下面一行 如果有不同的说明请删除 直接使用37-41行的代码
- REG ADD "HKLM\SOFTWARE\Classes\abc.%%i" /v "" /t REG_SZ /d "MPEG4 文件" /f /reg:64>nul
- ::设置关联图标 如无图标可删除下面一行
- REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\DefaultIcon" /v "" /t REG_SZ /d "%%i.ico" /f /reg:64>nul
- ::设置打开方式
- REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\shell" /v "" /t REG_SZ /d "open" /f /reg:64>nul
- REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\shell\open" /v "" /t REG_SZ /d "播放" /f /reg:64>nul
- REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\shell\open\command" /v "" /t REG_SZ /d "\"abc.exe\" \"%%1\"" /f /reg:64>nul
-
- ::在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts设置用户选择优先级
- ::MRUList的值决定了哪个程序排在最前面 这里指定了代号a为abc.exe 如果又有一个程序关联了本例中的3g2 那么代号b会被系统自动分配给新程序 则MRUList的值会变成 ba
- REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%%i\OpenWithList" /v "a" /t REG_SZ /d "abc.exe" /f /reg:64>nul
- REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%%i\OpenWithList" /v "MRUList" /t REG_SZ /d "a" /f /reg:64>nul
-
- ::在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts 下面进行最后的类型设定
- REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" /v "abc.%%i_.%%i" /t REG_DWORD /d 0x00000000 /f /reg:64>nul
- ::如果是媒体类型 还需要在下面的位置指定关联
- REG ADD "HKLM\SOFTWARE\Clients\Media\abc\Capabilities\FileAssociations" /v ".%%i" /t REG_SZ /d "abc.%%i" /f /reg:64>nul
- ::最后把关联设置导出给SetUserFTA 设置HASH值
- echo .%%i,abc.%%i>>Assoc.txt
- ::如果类型说明文字种类太多 可以再加上下面这段 把种类全部写在type.txt里 格式我贴在下面
- for /f "tokens=2* delims=_" %%a in ('findstr /i "^%%i_" "type.txt"') do (
- REG ADD "HKLM\SOFTWARE\Classes\abc.%%i" /v "" /t REG_SZ /d "%%a" /f /reg:64>nul
- REG ADD "HKCR\abc.%%i" /v "" /t REG_SZ /d "%%a" /f /reg:64>nul
- )
- )
- start /b /wait SetUserFTA Assoc.txt
- del /q Assoc.txt
复制代码 type.txt 内容按下面的格式写就行了 既后缀名加"_"加类型说明 一行一个- m1v_MPEG 视频文件
- m2t_MPEG2 视频文件
- m2ts_蓝光视频文件
复制代码 要取消上面设置的文件关联 可以用下面的批处理- @echo off
- ::启用管理员权限
- (PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
- echo 正在取消关联 请稍候...
- for %%i in (3g2 3gpp) do (
- REG delete HKCR\.%%i /ve /f /reg:64>nul 2>nul
- REG delete HKCR\abc.%%i /f /reg:64>nul 2>nul
- REG delete HKLM\SOFTWARE\Classes\.%%i /ve /f /reg:64>nul 2>nul
- REG delete HKLM\SOFTWARE\Classes\abc.%%i /f /reg:64>nul 2>nul
- REG delete HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%%i\OpenWithList /f /reg:64>nul 2>nul
- REG delete HKCU\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts /v abc.%%i_.%%i /f /reg:64>nul 2>nul
- )
- REG delete HKLM\SOFTWARE\Clients\Media\abc /f /reg:64>nul 2>nul
- ::刷新图标
- Set "TMPINF=%temp%\TmpInf.inf"
- echo [Version] >%TMPINF%
- echo Signature="$Windows NT$" >>%TMPINF%
- echo [DefaultInstall] >>%TMPINF%
- RUNDLL32 SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %TMPINF%
- del %TMPINF% /q
复制代码
|