首页 > 其他分享 >免登陆,用脚本提前修改微信、企业微信、QQ的聊天路径

免登陆,用脚本提前修改微信、企业微信、QQ的聊天路径

时间:2023-02-28 12:34:15浏览次数:59  
标签:QQ Chats 微信 路径 聊天记录 Tencent 聊天 REG

为什么要改聊天路径

微信、企业微信、QQ的聊天记录默认都是放在登陆用户的文档目录下面的

登陆用户的文档目录路径
C:\Users\%USERNAME%\Documents

在我的日常工作中,碰到的C盘空间满的问题,近90%是因为聊天记录放在C盘的原因。

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

HKEY_CURRENT_USER\Software\Tencent\WeChat

注意:

  1. 微信会在设置的路径下面自动生成一个 WeChat Files 的文件夹,聊天记录在这个文件夹下面

  2. 如果是用过微信的话,微信可能会在用户文件夹里面存一份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

HKEY_CURRENT_USER\Software\Tencent\WXWork

企业微信就没有微信的优先ini配置文件问题,基本是纯注册表来配置的。


有一个要注意的点是,新版本企业微信新安装的话,貌似会生成一个DataLocation 的项,以前是直接生成 DataLocationPath 指向用户文档下

DataLocation 当此项为1的时候,而且 DataLocationPath 不存在时,企业微信的聊天记录路径指向用户的AppData目录下

DataLocationPath 项存在的情况下,会无视 DataLocation 项,即使删除DataLocation也没影响。

一般情况,只修改企业微信的聊天记录路径不需要考虑这个问题,但如果想要读取已有的企业微信的聊天记录路径的话,就需要考虑这个问题了。

企业微信注册表,当 DataLocation 为 1,而且 DataLocationPath 不存在时,聊天记录路径为

C:\Users\%USERNAME%\AppData\Roaming\Tencent\WXWork\Data

当 DataLocation 为 1,而且 DataLocationPath 不存在时

QQ

QQ可能是因为腾讯早期产品的原因,用是ini配置文件来决定聊天记录路径的,配置文件放在 C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini,这个是公用文件下的路径,也就是说所有用户都是使用同一个ini配置文件。

QQ的聊天记录路径基本只有两种模式:

  1. 放在C:\Users\%USERNAME%\Documents下面
  2. 放在指定的文件路径下

这也就导致指定了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" 做为聊天记录路径


C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini

基础脚本

下面这两个脚本是在当前用户下修改聊天记录用的

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 SilentlyContinuecmdlet 如何从命令响应非终止错误

-Encoding OemPowerShell 中的字符编码

可以看出来,用Powershell 的原生命令改简单的注册表还是有点麻烦的,特别是新建这种操作,所以我更倾向于直接用Reg.exe,
就上面Bat里面的 REG ADD 命令,在PowerShell脚本里面也是能直接用的。

进阶用法

我常用的修改的方法有几种:

  1. 写成脚本在当前用户下运行。
  2. 直接修改默认用户注册表配置模板,新用户登陆时会使用这个模板的路径,缺点是无法按用户名文件夹区分。
  3. 装好系统后(或者封装镜像时),在管理员下,把修改路径的脚本放在所有用户都能访问公用文件夹内。修改默认用户注册表配置模板,将修改脚本加入注册表启动,登陆运行时就会触发脚本来修改。考虑到用户自己可能会需要自行修改聊天路径,所以在脚本的最后加一条命令,用于删除当前用户注册表中启动脚本的启动项,避免每次登陆都修改一次。

我觉得第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多平台发布

标签:QQ,Chats,微信,路径,聊天记录,Tencent,聊天,REG
From: https://www.cnblogs.com/tjxwork/p/17163595.html

相关文章