免登陆,用脚本提前修改微信、企业微信、QQ的聊天路径
为什么要改聊天路径
微信、企业微信、QQ的聊天记录默认都是放在登陆用户的文档目录下面的
登陆用户的文档目录路径 C:\Users\%USERNAME%\Documents
在我的日常工作中,碰到的C盘空间满的问题,近90%是因为聊天记录放在C盘的原因。
微信默认是在线就会把加入的所有群聊的聊天记录自动同步的,而很多人工作和生活都是用的同一个微信账号,除了工作群之外,更是加了不少日常生活的群,大部分生活群的图片和视频数量泛滥成灾,这些图片和视频也会一并同步到电脑上。
即使只是微信账号上只有纯粹的工作群,在工作上需要掺杂大量图片及视频来进行沟通的聊天也不在少数,更是有臭名昭著的转发文件就复制一份文件的问题,至今电脑版仍然没有解决这个问题,微信的聊天记录体积的膨胀速度非常可观。
聊天记录的膨胀速度已经是一个不容忽视的问题。
目前大部分企业在考虑经济及实用性的情况下,新购置的普通文职员工的电脑多为 128GB ~ 256GB 固态硬盘 + 500GB ~ 1TB 机械硬盘 的组合。
不改聊天记录路径的情况下,使用一定时间后, 除去必要的操作系统、安装的软件,128GB ~ 256GB 固态硬盘的剩余容量很容易就被聊天记录占满。
在我的日常工作中,因为C盘满而去处理的电脑里面,微信的聊天记录大部分情况下是占用最大,体积范围大部分分布在 50GB ~ 150GB 左右
我们不能指望用户自己去更改聊天路径、清理不需要的聊天记录。
我们也无法分辨哪些聊天记录是有用的。
在软件里面更改聊天记录路径也需要登陆后才能更改,很不方便。
所以我更倾向于在于新电脑交付使用前,就将聊天记录的路径给改到D盘,以避免后期的聊天记录过大的问题。
决定聊天记录路径的参数
假设想要把聊天记录的路径都成这种格式的路径下面,D盘\Chats\登陆用户名
例如 D:\Chats\tjxwork
下面用这个路径来做演示
微信
当前用户注册表中,微信的聊天记录路径参数为 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文件里面定义的路径。
为确保注册表的参数生效,需要删除这份文件。
微信 放用户文件夹中的 3ebffe94.ini 的文件路径 C:\Users\%USERNAME%\AppData\Roaming\Tencent\WeChat\All Users\config\3ebffe94.ini
企业微信
当前用户注册表中,企业微信的聊天记录路径参数为 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
也没影响。
一般情况,只修改企业微信的聊天记录路径不需要考虑这个问题,但如果想要读取已有的企业微信的聊天记录路径的话,就需要考虑这个问题了。
企业微信注册表,当 DataLocation 为 1,而且 DataLocationPath 不存在时,聊天记录路径为 C:\Users\%USERNAME%\AppData\Roaming\Tencent\WXWork\Data
QQ可能是因为腾讯早期产品的原因,用是ini配置文件来决定聊天记录路径的,配置文件放在 C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini
,这个是公用文件下的路径,也就是说所有用户都是使用同一个ini配置文件。
QQ的聊天记录路径基本只有两种模式:
- 放在
C:\Users\%USERNAME%\Documents
下面 - 放在指定的文件路径下
这也就导致指定了QQ的聊天记录,没法在自定义聊天记录路径的情况下按用户名文件夹来区分,好在QQ聊天记录文件夹下基本都是用QQ号来区分开的。
如果想的话,理论上可以写一个脚本在用户登陆时触发,每次登陆都把QQ的聊天记录的路径改到以特定路径的用户名文件夹下来分类,但是同样考虑到用户可能有修改路径的需求,所以暂时不尝试此方法。
如果是企业微信的话,当所有用户企业微信的聊天记录是同一个路径时,你切换用户之后甚至能直接登陆,现在不知道修复这个问题没有。
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
: 修改微信、企业微信、QQ的聊天记录路径.bat : 关闭Bat脚本的回显 @echo off color 0a echo. : 定义聊天记录的存放路径 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\3ebffe94.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
# 修改微信、企业微信、QQ的聊天记录路径.ps1 # 聊天记录的存放路径 $Chats_Path = "D:\Chats" # 判断D盘是否存在 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 # QQ $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 # 要注意的QQ这个ini配置文件会受不同语言系统下的文件编码影响(以前是,现在没再次确认) # 繁体系统下面配置文件和简体系统下面的是不一样(Big5、GB 2312),不能直接复制ini文件过去。 # 所以这里生成的时候也用了 "Oem”" 这个选项。使用系统CMD的默认编码。 } # 等3秒 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
: 更改以后登陆的新用户微信企业微信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
# 用户首次登陆时修改聊天记录路径.ps1 # 聊天记录的存放路径 $Chats_Path = "D:\Chats" # 判断D盘是否存在 if (Test-Path D:) { # 生成修改微信与企业微信的聊天记录路径的Bat脚本 $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 # 修改默认用户注册表,添加修改聊天路径的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 "$BatScript" /f REG UNLOAD HKEY_USERS\User_Default # 生成QQ聊天记录路径的ini配置文件 $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
: 用户首次登陆时修改聊天记录路径.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% )
在管理员用户下修改未登陆的已存在用户的聊天路径
: 在管理员用户下修改未登陆的已存在用户的聊天路径.bat @echo off color 0a echo. : 提示输入你要改的用户和路径 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 /T REG 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 /T REG 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
本文由mdnice多平台发布
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库