Board logo

标题: [文件管理] 批处理Windows用户资料转移(XP以上系统全兼容) [打印本页]

作者: fastslz    时间: 2011-3-7 20:21     标题: 批处理Windows用户资料转移(XP以上系统全兼容)

用户资料转移(精简版).cmd:转移用户文件及程序保存的数据
用户资料转移(完整版).cmd:转移用户文件及程序保存的数据和软件设置
使用方法:
解压到非系统盘,如E盘
高权限用户:直接运行E:\Users\用户资料转移(精简版).cmd
低权限用户:开始菜单>附件>命令提示符(右键以管理员身份运行)
            然后再黑窗口里输入
            cd /d e:\users 回车
            用户资料转移(精简版).cmd 回车
=====================================================
2011-3-8 更新记录
完善删除原位置用户文件代码的稳定性,使得代码本身没有任何危险性请放心使用!
=====================================================
  1. @echo off
  2. rem 本脚本已通过Windows XP,Windows 7(x64),Windows 7(x86)运行环境测试,Vista原则上和Windows 7相同
  3. rem 本脚本能实现在同PC上安装在多个系统的情况下同步用户资料,及单系统转移用户资料,让你在重新安装系统不再担心用户资料丢失、保存的游戏及应用程序设置丢失!
  4. rem 目前只提供常规转移代码,后续将优化完整转移包含AppData文件夹
  5. rem 本脚本出处bbs.bathome.net By:fastslz,转载请注明!
  6. ver|find "5.1"&&set "SysID=WinXP"
  7. ver|find "6.0"&&set "SysID=WinV"
  8. ver|find "6.1"&&set "SysID=Win7"
  9. if not exist "%UserName%\nul" md "%UserName%" 2>nul
  10. set "dDir=%~dp0"&set "uDir=%~dp0%UserName%"
  11. if %SysID%#==WinXP# call :WinXP
  12. if %SysID%#==Win7# call :Win7
  13. if %SysID%#==WinV# call :Win7
  14. echo.&echo 用户资料转移已完成,强烈推荐请立即注销并重新登录您的计算机。
  15. ping -n 10 127.0.1>nul 2>nul
  16. if exist "日志.log" start "" "日志.log"&exit
  17. :WinXP
  18. echo 设置用户资料转移到 %uDir%
  19. call :mk5 "Documents","Favorites","Desktop","Videos","Pictures","Music"
  20. goto:eof
  21. :Win7
  22. echo 设置用户资料转移到 %uDir%
  23. if exist "日志.log" >日志.log echo 下列的用户资料转移到 %uDir%
  24. net stop WMPNetworkSvc
  25. call :mk6 "Documents","Favorites","Desktop","Contacts","Saved Games","Links","Videos","Pictures","Music","Downloads","Searches"
  26. net start WMPNetworkSvc
  27. goto:eof
  28. :mk5
  29. if "%~1"=="" goto:eof
  30. setlocal enabledelayedexpansion
  31. set "key=%~1"
  32. if /i "!key!"=="Videos"  set "key=My Video"
  33. if /i "!key!"=="Music"  set "key=My Music"
  34. if /i "!key!"=="Pictures" set "key=My Pictures"
  35. if /i "!key!"=="Documents" set "key=Personal"
  36. if not exist "!uDir!\%~1\nul" md "!uDir!\%~1\" 2>nul
  37. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /f /v "!key!" /t REG_SZ /d "!uDir!\%~1" >nul 2>nul
  38. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /f /v "!key!" /t REG_EXPAND_SZ /d "!uDir!\%~1" >nul 2>nul
  39. if /i "!key!"=="Desktop" (
  40. if not exist "!uDir!\桌面\nul" md "!uDir!\桌面\" 2>nul
  41. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /f /v "!key!" /t REG_SZ /d "!uDir!\桌面" >nul 2>nul
  42. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /f /v "!key!" /t REG_EXPAND_SZ /d "!uDir!\桌面" >nul 2>nul
  43. )
  44. shift
  45. endlocal
  46. goto:mk5
  47. :mk6
  48. if "%~1"=="" goto:eof
  49. setlocal enabledelayedexpansion
  50. if exist "%HOMEDRIVE%%HOMEPATH%\%~1\*" (
  51. robocopy /e /copyall /xj /r:0 /w:0 /log+:日志.log /np /ndl /ns /fp /njh /njs "%HOMEDRIVE%%HOMEPATH%\%~1"  "!uDir!\%~1" 2>nul
  52. set "error=%errorlevel%"
  53. if !error! equ 16 echo 请以管理员身份运行!
  54. if !error! neq 16 rd /s/q "%HOMEDRIVE%%HOMEPATH%\%~1" 2>nul
  55. )
  56. set "key=%~1"
  57. if /i "!key!"=="Downloads" set "key={374DE290-123F-4565-9164-39C4925E467B}"
  58. if /i "!key!"=="Contacts" set "key={56784854-C6CB-462B-8169-88E350ACB882}"
  59. if /i "!key!"=="Links"  set "key={BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"
  60. if /i "!key!"=="Searches" set "key={7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"
  61. if /i "!key!"=="Saved Games" set "key={4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"
  62. if /i "!key!"=="Videos"  set "key=My Video"
  63. if /i "!key!"=="Music"  set "key=My Music"
  64. if /i "!key!"=="Pictures" set "key=My Pictures"
  65. if /i "!key!"=="Documents" set "key=Personal"
  66. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /f /v "!key!" /t REG_SZ /d "!uDir!\%~1" >nul 2>nul
  67. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /f /v "!key!" /t REG_EXPAND_SZ /d "!uDir!\%~1" >nul 2>nul
  68. shift
  69. endlocal
  70. goto:mk6
复制代码
链接: https://pan.baidu.com/s/1B_R0QJenMmtd6STWHSKyvQ 提取码: 4n4r
作者: batman    时间: 2011-3-8 10:41

提个小小建议:那两段if是不是可以用for来简化下,也可以用变量赋值来处理啊。。。
作者: fastslz    时间: 2011-3-8 21:19

谢谢batman兄的建议,我N久没写P了,生疏了,也没足够的时间,能继续完善代码已经知足了,而且win7权限也够麻烦的,因为权限所以robocopy后面rd /s/q "%HOMEDRIVE%%HOMEPATH%\%~1"变的很危险,所以win7中写代码没XP里轻松,还得继续深究下
作者: Batcher    时间: 2011-3-8 22:12     标题: 回复 3楼 的帖子

权限?你是指的UAC吗?
我的Vista和Win7都是关掉UAC的,那个东西太鸡肋了。
作者: fastslz    时间: 2011-3-8 22:22

是啊,就怕没有关UAC双击的话rd /s/q 那可是毁灭性的
现在有办法了,if %errorlevel% neq 16 rd /s/q .......
所以吧写代码要兼顾,万一就成罪人了^_^
作者: Batcher    时间: 2011-3-8 22:41

可以最开始先判断是否开启了UAC,如果已开启,就暂时关掉,等最后再开。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2