标题: [文本处理] 求助,如何通过bat文件来修改其它后缀文件的打开方式 [打印本页]
作者: dandd135 时间: 2023-8-5 23:04 标题: 求助,如何通过bat文件来修改其它后缀文件的打开方式
本帖最后由 dandd135 于 2023-8-5 23:06 编辑
网上看了教程,但还是不会写..
比如http://bbs.c3.wuyou.net/forum.php?mod=viewthread&tid=432280
抄了下来,写了但似乎没有用,好像报错
另外摘自本论坛的..
注册表两处地方相互对应,影响着文件的打开方式
一是HKEY_CLASSES_ROOT\扩展名,默认值 对应命令assoc 扩展名的返回值(文件类型)
二是HKEY_CLASSES_ROOT\文件类型\shell\open\command 默认值 对应命令ftype 文件类型的返回值(关联的程序)
另一处亦然
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\扩展名
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\文件类型\shell\open\command
作者: Five66 时间: 2023-8-6 02:26
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
这个优先级比较高
一般的用assoc和ftype命令就行了吧(大概)
作者: czjt1234 时间: 2023-8-6 06:28
用assoc和ftype命令,可能需要管理员权限
作者: dandd135 时间: 2023-8-6 11:26
楼上的大大,我不会写啊,谁能写个完整版的,参考一下
作者: czjt1234 时间: 2023-8-6 12:42
比如 word 文档的打开方式,运行
assoc .docx
可以看到是
.docx=Word.Document.12
那么如果你想修改 txt 文件也默认用 word 打开
那么
assoc .txt=Word.Document.12
作者: yakeyun 时间: 2023-8-6 13:21
本帖最后由 yakeyun 于 2023-8-6 13:23 编辑
回复 1# dandd135 - @echo off
- IF NOT EXIST file_associations.txt (echo 导出文件关联信息... & goto outfiles)
- IF EXIST file_associations.txt (echo 导入文件关联信息... & goto infiles)
- :outfiles
- assoc > file_associations.txt
- ftype >> file_associations.txt
- echo 导出完成!
- exit
-
- :infiles
- assoc < file_associations.txt
- ftype < file_associations.txt
- echo 导入完成!
- goto end
-
- :end
- REM 清理临时文件
- if exist file_associations.txt (echo 检测到目录存在关联文件,如果要删除文件继续回车即可。 & pause >nul)
- del file_associations.txt
- exit
复制代码
作者: jszw666 时间: 2023-8-18 11:33
互相学习,互为补充、修改,肯定能解决问题。
作者: louissgd 时间: 2023-8-19 15:14
本帖最后由 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
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |