[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助,如何通过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

本帖最后由 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编码格式
  1. @echo off
  2. ::启用管理员权限
  3. (PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
  4. echo 正在设置关联 请稍候...
  5. for %%i in (3g2 3gpp) do (
  6. ::在HKEY_CLASSES_ROOT建立文件类型
  7. REG ADD "HKCR\.%%i" /v "" /t REG_SZ /d "abc.%%i" /f /reg:64>nul
  8. ::建立文件类型说明 如不需要说明可删除下面一行 如果有不同的说明请删除 直接使用37-41行的代码
  9. REG ADD "HKCR\abc.%%i" /v "" /t REG_SZ /d "MPEG4 文件" /f /reg:64>nul
  10. ::设置关联图标 如无图标可删除下面一行
  11. REG ADD "HKCR\abc.%%i\DefaultIcon" /v "" /t REG_SZ /d "%%i.ico" /f /reg:64>nul
  12. ::设置打开方式
  13. REG ADD "HKCR\abc.%%i\shell\open\command" /v "" /t REG_SZ /d "\"abc.exe\" \"%%1\"" /f /reg:64>nul
  14. ::在HKEY_LOCAL_MACHINE\SOFTWARE\Classes建立文件类型
  15. REG ADD "HKLM\SOFTWARE\Classes\%%i" /v "" /t REG_SZ /d "abc.%%i" /f /reg:64>nul
  16. ::建立文件类型说明 如不需要说明可删除下面一行 如果有不同的说明请删除 直接使用37-41行的代码
  17. REG ADD "HKLM\SOFTWARE\Classes\abc.%%i" /v "" /t REG_SZ /d "MPEG4 文件" /f /reg:64>nul
  18. ::设置关联图标 如无图标可删除下面一行
  19. REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\DefaultIcon" /v "" /t REG_SZ /d "%%i.ico" /f /reg:64>nul
  20. ::设置打开方式
  21. REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\shell" /v "" /t REG_SZ /d "open" /f /reg:64>nul
  22. REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\shell\open" /v "" /t REG_SZ /d "播放" /f /reg:64>nul
  23. REG ADD "HKLM\SOFTWARE\Classes\abc.%%i\shell\open\command" /v "" /t REG_SZ /d "\"abc.exe\" \"%%1\"" /f /reg:64>nul
  24. ::在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts设置用户选择优先级
  25. ::MRUList的值决定了哪个程序排在最前面 这里指定了代号a为abc.exe 如果又有一个程序关联了本例中的3g2 那么代号b会被系统自动分配给新程序 则MRUList的值会变成 ba
  26. REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%%i\OpenWithList" /v "a" /t REG_SZ /d "abc.exe" /f /reg:64>nul
  27. REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%%i\OpenWithList" /v "MRUList" /t REG_SZ /d "a" /f /reg:64>nul
  28. ::在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts 下面进行最后的类型设定
  29. REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" /v "abc.%%i_.%%i" /t REG_DWORD /d 0x00000000 /f /reg:64>nul
  30. ::如果是媒体类型 还需要在下面的位置指定关联
  31. REG ADD "HKLM\SOFTWARE\Clients\Media\abc\Capabilities\FileAssociations" /v ".%%i" /t REG_SZ /d "abc.%%i" /f /reg:64>nul
  32. ::最后把关联设置导出给SetUserFTA 设置HASH值
  33. echo .%%i,abc.%%i>>Assoc.txt
  34. ::如果类型说明文字种类太多 可以再加上下面这段 把种类全部写在type.txt里 格式我贴在下面
  35. for /f "tokens=2* delims=_" %%a in ('findstr /i "^%%i_" "type.txt"') do (
  36. REG ADD "HKLM\SOFTWARE\Classes\abc.%%i" /v "" /t REG_SZ /d "%%a" /f /reg:64>nul
  37. REG ADD "HKCR\abc.%%i" /v "" /t REG_SZ /d "%%a" /f /reg:64>nul
  38. )
  39. )
  40. start /b /wait SetUserFTA Assoc.txt
  41. del /q Assoc.txt
复制代码
type.txt 内容按下面的格式写就行了 既后缀名加"_"加类型说明 一行一个
  1. m1v_MPEG 视频文件
  2. m2t_MPEG2 视频文件
  3. m2ts_蓝光视频文件
复制代码
要取消上面设置的文件关联 可以用下面的批处理
  1. @echo off
  2. ::启用管理员权限
  3. (PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
  4. echo 正在取消关联 请稍候...
  5. for %%i in (3g2 3gpp) do (
  6. REG delete HKCR\.%%i /ve /f /reg:64>nul 2>nul
  7. REG delete HKCR\abc.%%i /f /reg:64>nul 2>nul
  8. REG delete HKLM\SOFTWARE\Classes\.%%i /ve /f /reg:64>nul 2>nul
  9. REG delete HKLM\SOFTWARE\Classes\abc.%%i /f /reg:64>nul 2>nul
  10. REG delete HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%%i\OpenWithList /f /reg:64>nul 2>nul
  11. REG delete HKCU\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts /v abc.%%i_.%%i /f /reg:64>nul 2>nul
  12. )
  13. REG delete HKLM\SOFTWARE\Clients\Media\abc /f /reg:64>nul 2>nul
  14. ::刷新图标
  15. Set "TMPINF=%temp%\TmpInf.inf"
  16. echo [Version] >%TMPINF%
  17. echo Signature="$Windows NT$" >>%TMPINF%
  18. echo [DefaultInstall] >>%TMPINF%
  19. RUNDLL32 SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 %TMPINF%
  20. del %TMPINF% /q
复制代码

TOP

互相学习,互为补充、修改,肯定能解决问题。

TOP

本帖最后由 yakeyun 于 2023-8-6 13:23 编辑

回复 1# dandd135
  1. @echo off
  2. IF NOT EXIST file_associations.txt (echo 导出文件关联信息... & goto outfiles)
  3. IF EXIST file_associations.txt (echo 导入文件关联信息... & goto infiles)
  4. :outfiles
  5. assoc > file_associations.txt
  6. ftype >> file_associations.txt
  7. echo 导出完成!
  8. exit
  9. :infiles
  10. assoc < file_associations.txt
  11. ftype < file_associations.txt
  12. echo 导入完成!
  13. goto end
  14. :end
  15. REM 清理临时文件
  16. if exist file_associations.txt (echo 检测到目录存在关联文件,如果要删除文件继续回车即可。 & pause >nul)
  17. del  file_associations.txt
  18. exit
复制代码

TOP

比如 word 文档的打开方式,运行
assoc .docx
可以看到是
.docx=Word.Document.12

那么如果你想修改 txt 文件也默认用 word 打开
那么
assoc .txt=Word.Document.12

QQ 20147578

TOP

楼上的大大,我不会写啊,谁能写个完整版的,参考一下

TOP

用assoc和ftype命令,可能需要管理员权限

QQ 20147578

TOP

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
这个优先级比较高
一般的用assoc和ftype命令就行了吧(大概)

TOP

返回列表