Board logo

标题: [讨论]初学批处理写了个备份本地QQ数据,请高手指点。 [打印本页]

作者: zmt1982     时间: 2007-5-25 17:55    标题: [讨论]初学批处理写了个备份本地QQ数据,请高手指点。

我是前天才开始接触DOS的,以前不会DOS,但是自从学了一点Linux之后,发现DOS也很简单。
昨天一个同事想要备份QQ资料,所以想何不用批处理来实现,下午就开始研究批处理,晚上写到2点多,今天又优化了很多,终于写成了这个批处理,希望这里的高手多多指点:

除了那个for之外,其他都是原创。学到了很多东西
@echo off
color 2f
Title 批处理 备份恢复QQ个人设置+聊天记录 -后知后觉 QQ:272544 http://www.coos.cn
rem rarexe   //定义winrar路径,一般默认
set rarexe=c:\program files\winrar\winrar.exe
echo.
echo #############################################  
echo    初学批处理,学习中编写了这个简单的例子
echo    我的QQ:272544     http://www.coos.cn
echo #############################################
:cdQQ
echo.
echo.
@echo 系统正在定位您QQ的路径,请稍等……
echo.
for /f "skip=1" %%a in ('wmic logicaldisk where "DriveType=3" get caption') do (
        for /f "delims=" %%_ in ('dir /s/b/a-d %%a\QQ.exe 2^>nul') do (if exist "%%_" set QQpath=%%~dp_&goto :ovv)
)
:ovv
echo.
@echo 定位完毕,您QQ的路径为: %QQpath%
:Input
@echo.
@echo 本机所有的QQ号码如下:
@echo           ------------------
for /f %%i in ('dir "%QQPath%" /ad /b /w^|findstr "^[0-9]*$"') do echo                %%i
@echo           ------------------
echo.
set QQNumber=
set /p QQNumber=请输入您所要备份的QQ号码:
cls
echo.
if "%QQNumber%"=="" echo 你没有输入任何号码! && goto Input
echo %QQNumber%|findstr "^[0-9]*$">nul && goto dList || echo 您输入的不是一个QQ号码! && goto Input
:dList
if not exist d:\QQbak mkdir d:\QQbak
IF EXIST "%QQpath%\%QQNumber%" goto menu
goto error
:menu
cls
echo.
echo.
@echo  -----------------------------------------------
@echo    QQ:%QQNumber%您好!
@echo    您的QQ路径为:%QQpath%
@echo  -----------------------------------------------
@echo.
@echo           1 = 备份 QQ设置+聊天记录
@echo.
@echo           2 = 恢复 QQ设置+聊天记录
@echo.
@echo           3 = 重新输入 QQ号码
@echo.
@echo           Q = 取消/退出
@echo.
@echo.
set choose=
set /p choose=请选择:
if "%choose%"=="" goto menu
if "%choose%"=="1" cls && goto bak
if "%choose%"=="2" cls && goto reback
if "%choose%"=="3" cls && goto Input
if "%choose%"=="q" (goto exit) else echo ! 选择错误,请重新输入……
@echo.
pause
@echo.
goto menu
:bak
@echo  ------------------------------------------------------
@echo     正在备份QQ:%QQNumber%的设置+聊天记录,请稍等...
@echo  ------------------------------------------------------

%QQpath:~0,2%
cd "%QQPath%"
"%rarexe%" a d:\QQbak\%QQNumber%.rar "%QQNumber%"

@echo  ---------------------------------------------------
@echo     QQ:%QQNumber%的设置+聊天记录已备份至:
@echo     D:\QQbak\%QQNumber%.rar
@echo  ----------------------------------------------------
@echo.
pause
goto menu
:error
cls
cd d:\QQbak
@echo  ---------------------------------------------------
@echo    QQ号码设置错误,%QQNumber%不存在,请重新输入……
@echo  ---------------------------------------------------
goto Input
:reback
if not exist d:\QQbak\%QQNumber%.rar. (
@echo !您的QQ没有备份,返回重新选择……
@echo.
pause
@echo.
goto menu
) else (
@echo  ------------------------------------------------------
@echo     正在恢复QQ:%QQNumber%的设置+聊天记录,请稍等...
@echo  ------------------------------------------------------
@echo.
%QQpath:~0,2%
cd "%QQPath%"
"%rarexe%" x d:\QQbak\%QQNumber%.rar "%QQPath%"
@echo.
@echo  ---------------------------------------------------
@echo     QQ:%QQNumber%的设置+聊天记录已恢复:
@echo  ----------------------------------------------------
@echo.
pause
goto menu
)
:exit
exit
[ Last edited by zmt1982 on 2007-5-25 at 05:57 PM ]
作者: zhoushijay     时间: 2007-5-25 18:23
有2个点要说:
1,WINRAR A 命令不知道能否添加,如果不能的话可能新生成的RAR文件会替换前面的,我的系统上的帮助显示不了,所以我不确定!
2,QQ路劲直接从注册表读取比较好,全盘搜索需要一些时间.
作者: jy531320     时间: 2007-5-25 18:24
FOR语句上有错误。
肯定不行的。
作者: zhoushijay     时间: 2007-5-25 18:26
FOR语句没有错误,自己测试了一下可以的

[ Last edited by zhoushijay on 2007-5-25 at 06:29 PM ]
作者: zhoushijay     时间: 2007-5-25 18:32
收回刚才第1点,原来LZ是把整个号码文件夹压缩了,这样的话不管 winrar a 命令能否添加,覆盖前面的RAR文件也是没关系的
作者: 546474     时间: 2007-5-25 19:18
你很强的。
作者: zmt1982     时间: 2007-5-25 19:55
还有一点,就是号码列表会出来一个为0的号码
怎样才可以把这个号码屏蔽,我试着把0-9改成1-9,但是这样有很多号码显示不出来。
作者: zmt1982     时间: 2007-5-25 19:57
TO:zhoushijay

从注册表读取有点不好,有些QQ都不是安装的,直接复制就用,这样就很难找到了。
我测试了很多次,直接搜索速度也不是太慢,第一次大约5秒左右就可以了。

第二次,1-2秒就可以了。

[ Last edited by zmt1982 on 2007-5-25 at 07:58 PM ]
作者: zhoushijay     时间: 2007-5-28 18:47
直接复制的QQ似乎不能使用吧