免登录,用脚本提前修改微信、企业微信、QQ 的聊天路径
为什么要改聊天路径 微信、企业微信、QQ 的聊天记录默认都是放在登录用户的文档目录下面的
1 2 登录用户的文档目录路径 C:\Users\%USERNAME%\Documents
在我的日常工作中,碰到的 C 盘空间满的问题,近 90% 是因为聊天记录放在 C 盘的原因。
微信默认是在线就会把加入的所有群聊的聊天记录自动同步的,而很多人工作和生活都是用的同一个微信账号,除了工作群之外,更是加了不少日常生活的群,大部分生活群的图片和视频数量泛滥成灾,这些图片和视频也会一并同步到电脑上。
即使只是微信账号上只有纯粹的工作群,在工作上需要掺杂大量图片及视频来进行沟通的聊天也不在少数,更是有臭名昭著的转发文件就复制一份文件的问题,至今电脑版仍然没有解决这个问题,微信的聊天记录体积的膨胀速度非常可观。
聊天记录的膨胀速度已经是一个不容忽视的问题。
目前大部分企业在考虑经济及实用性的情况下,新购置的普通文职员工的电脑多为 128GB ~ 256GB 固态硬盘 + 500GB ~ 1TB 机械硬盘 的组合。
不改聊天记录路径的情况下,使用一定时间后, 除去必要的操作系统、安装的软件,128GB ~ 256GB 固态硬盘的剩余容量很容易就被聊天记录占满。
在我的日常工作中,因为 C 盘满而去处理的电脑里面,微信的聊天记录大部分情况下是占用最大,体积范围大部分分布在 50GB ~ 150GB 左右
我们不能指望用户自己去更改聊天路径、清理不需要的聊天记录。
我们也无法分辨哪些聊天记录是有用的。
在软件里面更改聊天记录路径也需要登录后才能更改,很不方便。
所以我更倾向于在新电脑交付使用前,就将聊天记录的路径给改到 D 盘,以避免后期的聊天记录过大的问题。
决定聊天记录路径的参数 假设想要把聊天记录的路径都成这种格式的路径下面,D盘\Chats\登录用户名
例如 D:\Chats\tjxwork
下面用这个路径来做演示
微信 1 2 3 4 5 6 7 8 9 10 11 当前用户注册表中,微信的聊天记录路径参数为 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Tencent\WeChat] "FileSavePath"="D:\\Chats\\tjxwork" 此时微信的聊天记录实际路径为 D:\Chats\tjxwork\WeChat Files
注意:
微信会在设置的路径下面自动生成一个 WeChat Files 的文件夹,聊天记录在这个文件夹下面
如果是用过微信的话,微信可能会在用户文件夹里面存一份 3ebffe94.ini 文件来保留聊天记录的位置,
如果这份 ini 文件存在的话,就会优先读取 ini 文件里面定义的路径。
为确保注册表的参数生效,需要删除这份文件。
1 2 3 微信 放用户文件夹中的 3ebffe94.ini 的文件路径 C:\Users\%USERNAME%\AppData\Roaming\Tencent\WeChat\All Users\config\3ebffe94.ini
企业微信 1 2 3 4 5 6 7 8 9 10 11 当前用户注册表中,企业微信的聊天记录路径参数为 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Tencent\WXWork] "DataLocationPath"="D:\\Chats\\tjxwork\\WXWork" 此时企业微信的聊天记录实际路径为 D:\Chats\tjxwork\WXWork
企业微信就没有微信的优先 ini 配置文件问题,基本是纯注册表来配置的。
有一个要注意的点是,新版本企业微信新安装的话,貌似会生成一个 DataLocation
的项,以前是直接生成 DataLocationPath
指向用户文档下
当 DataLocation
当此项为 1 的时候,而且 DataLocationPath
不存在时,企业微信的聊天记录路径指向用户的 AppData
目录下
当 DataLocationPath
项存在的情况下,会无视 DataLocation
项,即使删除 DataLocation
也没影响。
一般情况,只修改企业微信的聊天记录路径不需要考虑这个问题,但如果想要读取已有的企业微信的聊天记录路径的话,就需要考虑这个问题了。
1 2 3 企业微信注册表,当 DataLocation 为 1,而且 DataLocationPath 不存在时,聊天记录路径为 C:\Users\%USERNAME%\AppData\Roaming\Tencent\WXWork\Data
QQ QQ 可能是因为腾讯早期产品的原因,是用 ini 配置文件来决定聊天记录路径的,配置文件放在 C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini
,这个是公用文件下的路径,也就是说所有用户都是使用同一个 ini 配置文件。
QQ 的聊天记录路径基本只有两种模式:
放在 C:\Users\%USERNAME%\Documents
下面
放在指定的文件路径下
这也就导致指定了 QQ 的聊天记录,没法在自定义聊天记录路径的情况下按用户名文件夹来区分,好在 QQ 聊天记录文件夹下基本都是用 QQ 号来区分开的。
如果想的话,理论上可以写一个脚本在用户登录时触发,每次登录都把 QQ 的聊天记录的路径改到以特定路径的用户名文件夹下来分类,但是同样考虑到用户可能有修改路径的需求,所以暂时不尝试此方法。
如果是企业微信的话,当所有用户企业微信的聊天记录是同一个路径时,你切换用户之后甚至能直接登录,现在不知道修复这个问题没有。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 QQ聊天记录的配置文件路径 C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini QQ聊天记录的配置文件内容 [UserDataSet] UserDataSavePathType =2 UserDataSavePath =D:\Chats\Tencent Files 此时QQ的聊天记录实际路径为 D:\Chats\Tencent Files 当 UserDataSavePathType 的值是 2 时,代表使用指定的聊天记录路径,此时聊天记录的路径会按 UserDataSavePath 的值生效, 如果值是 1 ,就是直接使用 "C:\Users\%USERNAME%\Documents\Tencent Files" 做为聊天记录路径
基础脚本 下面这两个脚本是在当前用户下修改聊天记录用的
Bat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 : 修改微信、企业微信、QQ的聊天记录路径.bat : 关闭Bat脚本的回显 @echo off color 0 aecho .: 定义聊天记录的存放路径 SET Chats_Path=D:\Chats: 判断D盘是否存在 if exist D:\ ( : 新建用户名文件夹 MD %Chats_Path% \%USERNAME% : 微信 REG ADD "HKEY_CURRENT_USER\Software\Tencent\WeChat" /v FileSavePath /t REG_SZ /d "%Chats_Path% \%USERNAME% " /f DEL "C:\Users\%USERNAME% \AppData\Roaming\Tencent\WeChat\All Users\config\3 ebffe94.ini" : 企业微信 REG ADD "HKEY_CURRENT_USER\Software\Tencent\WXWork" /v DataLocationPath /t REG_SZ /d "%Chats_Path% \%USERNAME% \WXWork" /f : QQ SET %QQUserDataConfigPath% =C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini MD "C:\Users\Public\Documents\Tencent\QQ" echo [UserDataSet] > %QQUserDataConfigPath% echo UserDataSavePathType=2 >> %QQUserDataConfigPath% echo UserDataSavePath=%Chats_Path% \Tencent Files >> %QQUserDataConfigPath% ) : 等3 秒再关窗口 choice /c abc /t 3 /d a /m "/t wait" /n >nul
PowerShell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 $Chats_Path = "D:\Chats" if (Test-Path D:) { New-Item -Path $Chats_Path \$env:USERNAME -ItemType Directory New-Item -Path "Registry::HKEY_CURRENT_USER\Software\Tencent\WeChat" -Force New-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Software\Tencent\WeChat" -Name "FileSavePath" -Value "$Chats_Path \$env:USERNAME " -Force Remove-Item -Path "C:\Users\$env:USERNAME \AppData\Roaming\Tencent\WeChat\All Users\config\3ebffe94.ini" -Force -ErrorAction SilentlyContinue New-Item -Path "Registry::HKEY_CURRENT_USER\Software\Tencent\WXWork" -Force New-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Software\Tencent\WXWork" -Name "DataLocationPath" -Value "$Chats_Path \$env:USERNAME \WXWork" -Force $QQUserDataConfigPath = "C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini" New-Item -Path "C:\Users\Public\Documents\Tencent\QQ\" -Type Directory -Force "[UserDataSet]" | Out-File -FilePath $QQUserDataConfigPath -Force -Encoding Oem "UserDataSavePathType=2" | Out-File -FilePath $QQUserDataConfigPath -Force -Append -Encoding Oem "UserDataSavePath=$Chats_Path \Tencent Files" | Out-File -FilePath $QQUserDataConfigPath -Force -Append -Encoding Oem } Start-Sleep -Seconds 3
参数备注:
-ErrorAction SilentlyContinue
:cmdlet 如何从命令响应非终止错误
-Encoding Oem
:PowerShell 中的字符编码
可以看出来,用 Powershell 的原生命令改简单的注册表还是有点麻烦的,特别是新建这种操作,所以我更倾向于直接用 Reg.exe, 就上面 Bat 里面的 REG ADD
命令,在 PowerShell 脚本里面也是能直接用的。
进阶用法 我常用的修改的方法有几种:
写成脚本在当前用户下运行。
直接修改默认用户注册表配置模板,新用户登录时会使用这个模板的路径,缺点是无法按用户名文件夹区分。
装好系统后(或者封装镜像时),在管理员下,把修改路径的脚本放在所有用户都能访问公用文件夹内。修改默认用户注册表配置模板,将修改脚本加入注册表启动,登录运行时就会触发脚本来修改。考虑到用户自己可能会需要自行修改聊天路径,所以在脚本的最后加一条命令,用于删除当前用户注册表中启动脚本的启动项,避免每次登录都修改一次。
我觉得第 3 种是最理想的,下面第 2 种、第 3 种的脚本示例。
以下脚本请在管理员权限下运行
修改默认用户注册表配置模板 新用户的注册表,其实是通过复制 C:\Users\Default\NTUSER.DAT
这个注册表来生成实现的,所以可以通过提前修改这个注册表的参数来实现提前设置。
但是因为没办法不通过脚本的情况下,提前预处理工号的字段路径,所以,这种改法所有用户的聊天记录都放在一起,没法按用户名文件夹来区分,多用户使用可能会造成混乱。
下面这里把聊天记录都改到了 D:\Chats
微信的聊天记录实际路径为:D:\Chats\WeChat Files
企业微信的聊天记录实际路径为:D:\Chats\WXWork
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 : 更改以后登录的新用户微信企业微信QQ聊天记录路径到D盘.bat : 定义聊天记录的存放路径 SET Chats_Path=D:\Chats: 判断D盘是否存在 if exist D:\ ( : 修改默认用户注册表 REG LOAD HKEY_USERS\User_Default C:\Users\Default\NTUSER.DAT REG ADD "HKEY_USERS\User_Default\Software\Tencent\WeChat" /v FileSavePath /t REG_SZ /d "%Chats_Path% \" /f REG ADD "HKEY_USERS\User_Default\Software\Tencent\WXWork" /v DataLocationPath /t REG_SZ /d "%Chats_Path% \WXWork" /f REG UNLOAD HKEY_USERS\User_Default : 生成QQ配置文件 SET %QQUserDataConfigPath% =C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini MD "C:\Users\Public\Documents\Tencent\QQ" echo [UserDataSet] > %QQUserDataConfigPath% echo UserDataSavePathType=2 >> %QQUserDataConfigPath% echo UserDataSavePath=%Chats_Path% \Tencent Files >> %QQUserDataConfigPath% )
首次登录时修改聊天记录路径 运行效果:会生成一个 "C:\Users\Public\Documents\NewUserChatsPath.bat"
文件,新用户首次登录时会触发一次 NewUserChatsPath.bat
NewUserChatsPath.bat
脚本与上面的基础脚本基本效果一样 D盘\Chats\登录用户名
PowerShell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $Chats_Path = "D:\Chats" if (Test-Path D:) { $Bat_Script = "C:\Users\Public\Documents\NewUserChatsPath.bat" "MD D:\Chats\%USERNAME%" | Out-File -FilePath $Bat_Script -Force -Encoding Oem "REG ADD `"HKEY_CURRENT_USER\Software\Tencent\WeChat`" /v FileSavePath /t REG_SZ /d `"D:\Chats\%USERNAME%`" /f" | Out-File -FilePath $Bat_Script -Force -Append -Encoding Oem "REG ADD `"HKEY_CURRENT_USER\Software\Tencent\WXWork`" /v DataLocationPath /t REG_SZ /d `"D:\Chats\%USERNAME%\WXWork`" /f" | Out-File -FilePath $BatScript -Force -Append -Encoding Oem "REG DELETE `"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`" /v StartuRunNewUserChatsPath /f" | Out-File -FilePath $Bat_Script -Force -Append -Encoding Oem REG LOAD HKEY_USERS\User_Default C:\Users\Default\NTUSER.DAT REG ADD "HKEY_USERS\User_Default\Software\Microsoft\Windows\CurrentVersion\Run" /v StartuRunNewUserChatsPath /t REG_SZ /d "$BatScript " /f REG UNLOAD HKEY_USERS\User_Default $QQUserDataConfigPath = "C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini" New-Item -Path "C:\Users\Public\Documents\Tencent\QQ\" -Type Directory -Force "[UserDataSet]" | Out-File -FilePath $QQUserDataConfigPath -Force -Encoding Oem "UserDataSavePathType=2" | Out-File -FilePath $QQUserDataConfigPath -Force -Append -Encoding Oem "UserDataSavePath=$Chats_Path \Tencent Files" | Out-File -FilePath $QQUserDataConfigPath -Force -Append -Encoding Oem }
Bat 这个用 Bat 来写感觉会有点别扭,连空格都要注意,所以建议还是用 PowerShell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 : 用户首次登录时修改聊天记录路径.bat : 聊天记录的存放路径 SET Chats_Path=D:\Chats: 判断D盘是否存在 if exist D:\ ( : 生成修改微信与企业微信的聊天记录路径的Bat脚本 SET Bat_Script=C:\Users\Public\Documents\NewUserChatsPath.bat echo SET Chats_Path=%Chats_Path% > %Bat_Script% echo MD %%Chats_Path%%\%%USERNAME%% >> %Bat_Script% echo REG ADD "HKEY_CURRENT_USER\Software\Tencent\WeChat" /v FileSavePath /t REG_SZ /d "%%Chats_Path%%\%%USERNAME%%" /f >> %Bat_Script% echo REG ADD "HKEY_CURRENT_USER\Software\Tencent\WXWork" /v DataLocationPath /t REG_SZ /d "%%Chats_Path%%\%%USERNAME%%\WXWork" /f >> %Bat_Script% echo REG DELETE "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v StartuRunNewUserChatsPath /f >> %Bat_Script% : 修改默认用户注册表,添加修改聊天路径的Bat脚本的启动信息 REG LOAD HKEY_USERS\User_Default C:\Users\Default\NTUSER.DAT REG ADD "HKEY_USERS\User_Default\Software\Microsoft\Windows\CurrentVersion\Run" /v StartuRunNewUserChatsPath /t REG_SZ /d "%Bat_Script%" /f REG UNLOAD HKEY_USERS\User_Default : 生成QQ聊天记录路径的ini配置文件 SET %QQUserDataConfigPath%=C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini MD "C:\Users\Public\Documents\Tencent\QQ" echo [UserDataSet ] > %QQUserDataConfigPath% echo UserDataSavePathType=2 >> %QQUserDataConfigPath% echo UserDataSavePath=%Chats_Path%\Tencent Files >> %QQUserDataConfigPath% )
在管理员用户下修改未登录的已存在用户的聊天路径 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 : 在管理员用户下修改未登录的已存在用户的聊天路径.bat @echo off color 0 aecho .: 提示输入你要改的用户和路径 SET /p UserFolder=User Folder Name (tjxwork):SET /p WeChat_Path=WeChat Path (D:\Chats\tjxwork):SET /p WXWork_Path=WXWork Path (D:\Chats\tjxwork\WXWork):: 挂载指定用户的注册表进行修改 REG LOAD HKEY_USERS\User_Temp C:\Users\%UserFolder% \NTUSER.DAT REG ADD "HKEY_USERS\User_Temp\SOFTWARE\Tencent\WeChat" /v FileSavePath /t REG_SZ /d "%WeChat_Path% " /f REG ADD "HKEY_USERS\User_Temp\SOFTWARE\Tencent\WXWork" /v DataLocationPath /t REG_SZ /d "%WXWork_Path% " /f : 下面这3 行的作用是打开Regedit.exe让你看看有没有改成功 TASKKILL /F /IM Regedit.exe /TREG ADD "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v LastKey /t REG_SZ /d "HKEY_USERS\User_Temp\SOFTWARE\Tencent\WeChat" /f Regedit.exe : 按任意键完成修改,结束Regedit.exe,卸载用户注册表 Pause TASKKILL /F /IM Regedit.exe /TREG UNLOAD HKEY_USERS\User_Temp : 等3 秒再关窗口 choice /c abc /t 3 /d a /m "/t wait" /n >nul
补充 我实际中用的脚本和这些例子的参数命名之类都不太一样,加上时间跨度有点长,命名风格有点乱。
有些在用代码没必要也不方便直接放出,上面写的例子我都是删减并改过的,但没空做太多验证测试,如果有出错的地方劳驾指出,请见谅。
原文作者:tjxwork 原文链接:https://www.tjxblog.com/blog/2023-0001 发布时间:2023-01-10