无忧启动论坛

标题: 带参数运行自动移动用户文件夹 [打印本页]

作者: wxinchun92    时间: 2024-3-13 18:24
标题: 带参数运行自动移动用户文件夹
本帖最后由 wxinchun92 于 2025-6-28 22:43 编辑

原帖批处理迁移系统用户文件夹位置 - 综合讨论区 - 无忧启动论坛 - Powered by Discuz! (wuyou.net)

2025/6/28
修复无法手动更改驱动器问题

感谢Neko提供支持

适用于win7及以上
纠正部分路径错误
增加自动运行


  1. @echo off
  2. title 移动目标文件夹位置向导 by chishingchan
  3. SETLOCAL ENABLEDELAYEDEXPANSION
  4. set drive=.
  5. set choice=.
  6. set Name=
  7. for /f "tokens=6 delims=[]. " %%i in ('ver') do set winbuild=%%i
  8. if %winbuild% LSS 7600 mshta vbscript:CreateObject("Wscript.Shell").popup("仅支持 Windows 7及以上的系统运行!",5,"提示",64)(window.close)&&exit
  9. set _NCS=1
  10. if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
  11. if %_NCS% EQU 1 call :_colorprep
  12. if "%1"=="/?" goto help
  13. if /i "%1"=="/h" goto help
  14. if %winbuild% GEQ 16299 set doj=1
  15. set regg=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer

  16. set "_work=%~dp0"
  17. if "%_work:~-1%"=="" set "_work=%_work:~0,-1%"
  18. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "Desktop"') do set Current_Desktop=%%b
  19. if %Current_Desktop% EQU %_work% mshta vbscript:CreateObject("Wscript.Shell").popup("请勿在桌面运行此脚本!",5,"提示",64)(window.close)&&exit

  20. for /f "tokens=3" %%i in ('powershell Get-WmiObject -Class Win32_LogicalDisk ^| findstr "DeviceID"') do if not %%i==%SystemDrive% set Name=%%i !Name!
  21. set choice=!Name!
  22. for %%i in (%choice%) do if exist %%i\nul if not exist "%%i\Windows\explorer.exe" set drive=%%i
  23. if "%drive%"=="." mshta vbscript:CreateObject("Wscript.Shell").popup("没有发现可用驱动器!",4,"错误",64)(window.close)&&exit

  24. set CopyFile=N
  25. set DelFile=N
  26. if "%2" NEQ "" call :config %2
  27. set HP=\Users\%USERNAME%
  28. if /i "%1"=="/u" goto default

  29. echo 正在检测系统,请稍候...
  30. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"') do set Current_Saved_Games=%%b
  31. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "{56784854-C6CB-462B-8169-88E350ACB882}"') do set Current_Contacts=%%b
  32. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"') do set Current_Links=%%b
  33. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"') do set Current_Searches=%%b
  34. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "Favorites"') do set Current_Favorites=%%b
  35. for /f "tokens=3*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "My Video"') do set Current_My_Video=%%b
  36. for /f "tokens=3*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "My Pictures"') do set Current_My_Pictures=%%b
  37. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "Personal"') do set Current_Personal=%%b
  38. for /f "tokens=3*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "My Music"') do set Current_My_Music=%%b
  39. for /f "tokens=2*" %%a in ('REG QUERY "%regg%\Shell Folders" /v "{374DE290-123F-4565-9164-39C4925E467B}"') do set Current_Downloads=%%b
  40. if defined doj (
  41.     for /f "skip=2 tokens=2*" %%a in ('REG QUERY "%regg%\User Shell Folders" /v "{31C0DD25-9439-4F12-BF41-7FF4EDA38722}"') do set Current_Objects=%%b
  42. )

  43. if "%1" EQU "" goto input
  44. set conf=%1
  45. call :cap %conf% conf
  46. echo %choice%|findstr /ic "%conf%">nul 2>nul
  47. if %errorlevel% NEQ 0 mshta vbscript:CreateObject("Wscript.Shell").popup("驱动器不存在!",3,"错误",64)(window.close)&&exit
  48. set Drive_Letter=%conf%
  49. set REG_EX=%Drive_Letter%%HP%
  50. goto auto

  51. :input
  52. cls
  53. echo %Def%当前文件夹位置:
  54. echo.
  55. echo.『我的文档』                %_dBlue%%Current_Personal%%Def%
  56. echo.『桌面』                %_dBlue%%Current_Desktop%%Def%
  57. echo.『下载』                %_dBlue%%Current_Downloads%%Def%
  58. echo.『收藏夹』                %_dBlue%%Current_Favorites%%Def%
  59. echo.『我的图片』                %_dBlue%%Current_My_Pictures%%Def%
  60. echo.『我的视频』                %_dBlue%%Current_My_Video%%Def%
  61. echo.『我的音乐』                %_dBlue%%Current_My_Music%%Def%
  62. echo.『保存的游戏』                %_dBlue%%Current_Saved_Games%%Def%
  63. echo.『联系人』                %_dBlue%%Current_Contacts%%Def%
  64. echo.『链接』                %_dBlue%%Current_Links%%Def%
  65. echo.『搜索』                %_dBlue%%Current_Searches%%Def%
  66. if defined doj (echo.『3D 对象』                %_dBlue%%Current_Objects%%Def%)
  67. echo.%_Green%
  68. echo.   U      还原默认
  69. echo.   Q      退出
  70. echo.%_Yellow%

  71. set Drive_Letter=%drive%
  72. set /P Drive_Letter="请输入目标驱动器(默认值:%drive%) [%choice%] "
  73. echo.
  74. if /i "%Drive_Letter%"=="Q" goto end
  75. if /i "%Drive_Letter%"=="U" goto copyfiles
  76. call :cap %Drive_Letter% Drive_Letter
  77. echo "%choice%" | findstr /C:"%Drive_Letter%" >nul
  78. if %errorlevel% equ 0 goto copyfiles
  79. mshta vbscript:CreateObject("Wscript.Shell").popup("输入有误,未找到对应驱动器!",2,"错误",64)(window.close)
  80. goto input

  81. :copyfiles
  82. echo %Drive_Letter%
  83. set /P CopyFile="是否复制文件夹到驱动器(默认值:N) [ 返回(R) | 是(Y) | 否(N) ] "
  84. echo.
  85. if /i "%CopyFile%"=="Y" goto delsource
  86. if /i "%CopyFile%"=="N" goto delsource
  87. if /i "%CopyFile%"=="R" goto input
  88. set CopyFile=N
  89. mshta vbscript:CreateObject("Wscript.Shell").popup("输入有误!",2,"错误",64)(window.close)
  90. goto copyfiles

  91. :delsource
  92. set /P DelFile="是否删除源驱动器文件夹(默认值:N) [ 返回(R) | 是(Y) | 否(N) ] "
  93. if /i "%DelFile%"=="Y" goto info
  94. if /i "%DelFile%"=="N" goto info
  95. if /i "%DelFile%"=="R" goto input
  96. set DelFile=N
  97. mshta vbscript:CreateObject("Wscript.Shell").popup("输入有误!",2,"错误",64)(window.close)
  98. goto delsource

  99. :info
  100. if /i "%CopyFile%"=="N" set CopyFilee=%_Blue%不%Def%
  101. if /i "%CopyFile%"=="Y" set CopyFilee=%_Red%是%Def%
  102. if /i "%DelFile%"=="N" set DelFilee=%_Blue%不%Def%
  103. if /i "%DelFile%"=="Y" set DelFilee=%_Red%是%Def%
  104. if /i "%Drive_Letter%"=="U" goto default
  105. set REG_EX=%Drive_Letter%%HP%
  106. goto connf

  107. :default
  108. set Drive_Letter=%HOMEDRIVE%
  109. set REG_EX=%%USERPROFILE%%
  110. if "%1" NEQ "" goto auto

  111. :connf
  112. echo %Def%================================= 配 置 信 息 =================================
  113. echo 目标驱动器:%_Red%%Drive_Letter%%HP%%Def%
  114. echo 复制文件夹:%CopyFilee%
  115. echo 删除源文件:%DelFilee%
  116. echo ===============================================================================
  117. echo.&&pause&&echo.
  118. :auto
  119. set shel=shell32.dll
  120. if "%Current_Desktop:~0,1%"=="%Drive_Letter:~0,1%" mshta vbscript:CreateObject("Wscript.Shell").popup("目标驱动器与当前驱动器相同!",2,"错误",64)(window.close)&&exit
  121. echo %_lBlue%正在处理『我的文档』...
  122. set Icon=-21770
  123. set Icon1=-112
  124. set Icon2=-235
  125. call :aing  "%Current_Personal%" Documents Personal "{F42EE2D3-909F-4907-8871-4C22FC0BF756}"

  126. echo 正在处理『桌面』...
  127. set Icon=-21769
  128. set Icon1=-183
  129. call :aing "%Current_Desktop%" Desktop Desktop "{754AC886-DF64-4CBA-86B5-F7FBF4FBCEF5}"

  130. echo 正在处理『下载』...
  131. set Icon=-21798
  132. set Icon1=-184
  133. call :aing "%Current_Downloads%" Downloads "{374DE290-123F-4565-9164-39C4925E467B}" "{7D83EE9B-2244-4E70-B1F5-5393042AF1E4}"

  134. echo 正在处理『收藏夹』...
  135. set Icon=-21796
  136. set Icon1=-115
  137. set Icon2=-173
  138. call :aing "%Current_Favorites%" Favorites Favorites

  139. echo 正在处理『我的图片』...
  140. set Icon=-21779
  141. set Icon1=-113
  142. set Icon2=-236
  143. set Icon3=-12688
  144. call :aing "%Current_My_Pictures%" Pictures "My Pictures" "{0DDD015D-B06C-45D5-8C4C-F59713854639}"

  145. echo 正在处理『我的视频』...
  146. set Icon=-21791
  147. set Icon1=-189
  148. set Icon2=-238
  149. set Icon3=-12690
  150. call :aing "%Current_My_Video%" Videos "My Video" "{35286A68-3C57-41A1-BBB1-0EAE73D76C95}"

  151. echo 正在处理『我的音乐』...
  152. set Icon=-21790
  153. set Icon1=-108
  154. set Icon2=-237
  155. set Icon3=-12689
  156. call :aing "%Current_My_Music%" Music "My Music" "{A0C69A99-21C8-4671-8703-7934162FCF1D}"

  157. echo 正在处理『保存的游戏』...
  158. set Icon=-21814
  159. set Icon1=-186
  160. call :aing "%Current_Saved_Games%" "Saved Games" "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"

  161. echo 正在处理『联系人』...
  162. set Icon=-10100
  163. set Icon1=-181
  164. set Icon3=-10200
  165. call :aing "%Current_Contacts%" Contacts "{56784854-C6CB-462B-8169-88E350ACB882}"

  166. echo 正在处理『链接』...
  167. set Icon=-21810
  168. set Icon1=-185
  169. call :aing "%Current_Links%" Links "{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"

  170. echo 正在处理『搜索』...
  171. set Icon=-9031
  172. set Icon1=-18
  173. call :aing "%Current_Searches%" Searches "{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"

  174. if not defined doj goto icoo
  175. echo %_lBlue%正在处理『3D 对象』...
  176. set shel=windows.storage.dll
  177. set Icon=-21825
  178. set Icon1=-198
  179. call :aing "%Current_Objects%" "3D Objects" "{31C0DD25-9439-4F12-BF41-7FF4EDA38722}"

  180. :icoo
  181. rem 正在处理『图标缓存』...
  182. attrib -r -a -s -h "%USERPROFILE%\AppData\Local\IconCache.db">nul 2>nul
  183. del /f /q "%USERPROFILE%\AppData\Local\IconCache.db">nul 2>nul
  184. goto end

  185. :aing
  186. md %Drive_Letter%%HP%\%2
  187. if /i %CopyFile% EQU Y xcopy %~1\*.* %Drive_Letter%%HP%\%2\ /s /y>nul 2>nul
  188. attrib -r -a -s -h %Drive_Letter%%HP%\%2\desktop.ini>nul 2>nul
  189. echo.>%Drive_Letter%%HP%\%2\desktop.ini
  190. echo [.ShellClassInfo]>>%Drive_Letter%%HP%\%2\desktop.ini
  191. echo LocalizedResourceName=@%%SystemRoot%%\system32\%shel%,%Icon%>>%Drive_Letter%%HP%\%2\desktop.ini
  192. if defined Icon3 echo InfoTip=@%%SystemRoot%%\system32\shell32.dll,%Icon3%>>%Drive_Letter%%HP%\%2\desktop.ini
  193. echo IconResource=%%SystemRoot%%\system32\imageres.dll,%Icon1%>>%Drive_Letter%%HP%\%2\desktop.ini
  194. if defined Icon2 echo IconFile=%%SystemRoot%%\system32\shell32.dll>>%Drive_Letter%%HP%\%2\desktop.ini
  195. if defined Icon2 echo IconIndex=%Icon2%>>%Drive_Letter%%HP%\%2\desktop.ini
  196. if %2==Links call :lnk
  197. if %2==Searches call :srs
  198. attrib -r +a +s +h %Drive_Letter%%HP%\%2\desktop.ini>nul 2>nul
  199. attrib -r +a +s -h %Drive_Letter%%HP%\%2 /s /d>nul 2>nul
  200. reg add "%regg%\Shell Folders" /f /v %3 /t REG_SZ /d "%Drive_Letter%%HP%\%~2">nul 2>nul
  201. reg add "%regg%\User Shell Folders" /f /v %3 /t REG_EXPAND_SZ /d "%REG_EX%\%~2">nul 2>nul
  202. set usf=%4
  203. if defined usf reg add "%regg%\User Shell Folders" /f /v %4 /t REG_EXPAND_SZ /d "%REG_EX%\%~2">nul 2>nul
  204. if /i %DelFile% EQU Y rd /s /q %1>nul 2>nul
  205. set usf=
  206. set Icon=
  207. set Icon1=
  208. set Icon2=
  209. set Icon3=
  210. exit /b

  211. :config
  212. set con=%1
  213. echo %con%|findstr /i "c">nul && set "CopyFile=Y"
  214. echo %con%|findstr /i "d">nul && set "DelFile=Y"
  215. exit /b

  216. ::字体颜色
  217. :_colorprep
  218. for /f %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
  219. set "Def=%esc%[0m"
  220. set  "_Red=%esc%[;91m"
  221. set  "_Green=%esc%[;92m"
  222. set  "_Blue=%esc%[;94m"
  223. set  "_dBlue=%esc%[;96m"
  224. set  "_lBlue=%esc%[;36m"
  225. set  "_Yellow=%esc%[;93m"
  226. exit /b

  227. :help
  228. echo.
  229. echo. %_Yellow%%~nx0%Def% [drive:] [/U] [/H] [/CD]
  230. echo.
  231. echo. drive:        目标驱动器,可以不加冒号:
  232. echo. /U        还原默认
  233. echo. /H        帮助
  234. echo. /CD        C-复制文件夹,D-删除源文件,可单独使用,默认不复制不删除
  235. echo.
  236. echo.eg. %_lBlue%%~nx0 d /cd%Def%        移动到D盘
  237. echo.    %_lBlue%%~nx0 e%Def%             在E盘新建一个用户文件夹
  238. echo.
  239. echo. 直接运行 %_Yellow%%~nx0%Def% 启动向导。
  240. echo.
  241. goto :EOF

  242. ::添加冒号&转大写
  243. :cap
  244. set aa=%~1
  245. if "%aa:~-1%" NEQ ":" (set "aa=%aa%:")
  246. for /f "delims=" %%a in ('tree "\$\%aa%"^|find /i ":\$\%aa%"') do set aa=%%~nxa
  247. set "%~2=%aa%"
  248. exit /b


  249. :lnk
  250. echo DefaultDropEffect=^4>>%Drive_Letter%%HP%\Links\desktop.ini
  251. echo [LocalizedFileNames]>>%Drive_Letter%%HP%\Links\desktop.ini
  252. echo RecentPlaces.lnk=@shell32.dll,-37217>>%Drive_Letter%%HP%\Links\desktop.ini
  253. echo Desktop.lnk=@shell32.dll,-21769>>%Drive_Letter%%HP%\Links\desktop.ini
  254. echo Downloads.lnk=@shell32.dll,-21798>>%Drive_Letter%%HP%\Links\desktop.ini
  255. exit /b

  256. :srs
  257. echo [LocalizedFileNames]>>%Drive_Letter%%HP%\Searches\desktop.ini
  258. echo Indexed Locations.search-ms=@searchfolder.dll,-32820>>%Drive_Letter%%HP%\Searches\desktop.ini
  259. echo Everywhere.search-ms=@searchfolder.dll,-32822>>%Drive_Letter%%HP%\Searches\desktop.ini
  260. exit /b

  261. :end
  262. taskkill /f /im explorer.exe
  263. start explorer.exe
  264. exit
复制代码






作者: yyz2191958    时间: 2024-3-13 18:33
谢谢分享
作者: denslin    时间: 2024-3-13 18:38
谢谢分享
作者: 呵呵#1861    时间: 2024-3-13 18:42
谢谢分享
作者: wang1126    时间: 2024-3-13 19:24
谢谢分享
作者: zlq_hysy    时间: 2024-3-13 19:45
谢谢,正需要
作者: yuguotqing    时间: 2024-3-13 20:12
感谢分享  收藏
作者: 2012ccxbox    时间: 2024-3-13 20:33
有检测磁盘大小么
作者: yc2428    时间: 2024-3-13 20:35
谢谢分享
作者: wxinchun92    时间: 2024-3-13 20:50
2012ccxbox 发表于 2024-3-13 20:33
有检测磁盘大小么

没,可检测之后调用
作者: 黑中见白    时间: 2024-3-13 21:49
过于复杂了
不如直接wimlib热备份admin文件夹
改文件夹列表直接改注册表
修改路径是通过注册表修改
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\r
ProfileImagePath值来实现的

作者: aigpt    时间: 2024-3-13 22:55
回复下载 感谢分享
作者: nathan6498    时间: 2024-3-14 00:03
谢谢分享
作者: dai202403    时间: 2024-3-14 00:07
谢谢分享!
作者: promrhxq    时间: 2024-3-14 00:19
感谢分享好东东
作者: hehuiying    时间: 2024-3-14 02:43
这是伟大的理他主义精神!
作者: cysky    时间: 2024-3-14 09:02
不错 收藏学习一下
作者: 君临唯一    时间: 2024-3-14 09:12
试试
作者: chibuzhu    时间: 2024-3-14 09:28
感谢分享
作者: papachi    时间: 2024-3-14 09:55
谢谢分享
作者: AcidBurn    时间: 2024-3-14 10:10
谢谢分享
作者: 2267981144    时间: 2024-3-14 13:46
谢谢热心提供分享!
作者: crt1024x768    时间: 2024-3-14 13:58
学习一下高级技巧了
作者: tanchenglong    时间: 2024-3-14 14:02
火钳刘明,好人一生平安
作者: 51xp    时间: 2024-3-14 15:09

感谢分享  收藏
作者: mengxiangdao    时间: 2024-3-19 08:45
使用批处理转移文档 批处理真实强大
作者: hehuiying    时间: 2024-3-26 21:58
谢谢分享
作者: chenshipeng    时间: 2024-3-26 22:14
两个附件什么区别
作者: wxinchun92    时间: 2024-3-27 09:05
chenshipeng 发表于 2024-3-26 22:14
两个附件什么区别

没,第一个忘删了
作者: fengshangren    时间: 2025-1-18 12:31
来了解学习一下
作者: Neko    时间: 2025-3-5 10:39
本帖最后由 Neko 于 2025-3-5 10:41 编辑

感谢楼主分享,非常实用的脚本!





Windows 11 版本 24H2 开始,不再预装 WMIC,脚本第 21 行命令可以换成 PowerShell 方式:
  1. for /f "tokens=3" %%i in ('powershell Get-WmiObject -Class Win32_LogicalDisk ^| findstr "DeviceID"') do if not %%i==%SystemDrive% set Name=%%i !Name!
复制代码

作者: wxinchun92    时间: 2025-3-6 08:56
Neko 发表于 2025-3-5 10:39
感谢楼主分享,非常实用的脚本!

感谢指导
作者: ynb168c    时间: 2025-3-6 09:24

谢谢热心提供分享!




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3