Board logo

标题: [文件操作] [分享]批处理归档桌面文件夹|桌面文件整理 [打印本页]

作者: mms0536    时间: 2015-1-11 03:42     标题: [分享]批处理归档桌面文件夹|桌面文件整理

本帖最后由 mms0536 于 2015-1-11 16:44 编辑

win8测试验证的,win7应该也行,xp据反馈不行,可能少了choice robocopy 这几个命令,有需要在xp运行的自己找下相关命令替换掉吧
比如choice这个就完全可以删掉,robocopy用xcopy或者move替代
堆叠的命令......
本来自己用高级语言写了一个,用了一年多,后来重装系统搞丢了,最近突发奇想,用批处理实现个试试
从23:00开始搞到现在.....我服了我自己了,里面乱七八糟的,将就用吧- -!
发现原创版块还有等级要求哎...还好有,要不然这个堆叠命令的脚本就混进去了

脚本作用:
1.移动桌面上的文件或者文件夹到指定目录,目录里面存储结构为 年\年-月-日\* 例如我设定归档目录是 d:\原桌面 现在时间是2015-1-11 03:24:43
   运行之后就会把当前桌面上的文件和文件夹移动到 d:\原桌面\2015\2015-1-11\下面
2.已排除.lnk文件,也就是不移动快捷方式
3.自动创建两个快捷方式 一个是脚本自己的,一个是 d:\原桌面\2015\
4.脚本有配置文件,目前就一个配置项...运行脚本可以产生日志,日志在配置文件夹下面,具体自己看源码...日志至少保存最近30天内的,用了robocopy的特性
  如果你一年不使用,那一年前的日志还是存在的,所以这个保存时间的长短要看你什么时候使用这个脚本- -!
5.用到了以下东西,
   ①大小写转换,参考了http://www.bathome.net/viewthrea ... =%B4%F3%D0%A1%D0%B4 10楼同学的思路,还看了其他网站的一个代码,实在是看不懂......
  1. batman:
  2. @echo off
  3. set "str=i like the bathome,because here is the batch of the world."
  4. set "code=A B C D E F G H I J K L N M O P Q R S T U V W X Y Z"
  5. for %%i in (%code%) do call,set "str=%%str:%%i=%%i%%"
  6. :lp
  7. set /p=%str:~,1%<nul&set "str=%str:~1%"
  8. for /l %%i in (1,1,200) do echo>nul
  9. if defined str goto lp
  10. pause>nul
复制代码
②创建快捷方式,格式化时间等忘记以前在哪里找的了,我是从我自己的笔记里面翻出来的-_-


具体如下:
  1. @echo off
  2. set title_T=桌面便捷整理工具  --By:批处理之家mms0536 文件修改时间:%~t0
  3. title %title_T%
  4. rem 格式化时间
  5. for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
  6.   set tt=%%a
  7. )
  8. set Today=%tt:~0,4%-%tt:~4,2%-%tt:~6,2%
  9. set Time_T=%tt:~8,2%:%tt:~10,2%:%tt:~12,2%
  10. set y=%Today:~0,4%
  11. set m=%Today:~5,2%
  12. set d=%Today:~8,2%
  13. set t=%Time_T:~0,8%
  14. set t=%t::=.%
  15. set config_sort_dir=%AllUsersProfile%\Auto_Sort_Desktop_files\
  16. set config_sort_log=%AllUsersProfile%\Auto_Sort_Desktop_files\log
  17. set config_sort_file=%AllUsersProfile%\Auto_Sort_Desktop_files\config.ini
  18. rem 获取下桌面路径
  19. for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do (
  20. set desktop_dir=%%j
  21. )
  22. rem 判断配置文件夹以及配置文件是否存在,不存在创建
  23. if not exist "%config_sort_dir%" mkdir "%config_sort_dir%"
  24. if not exist "%config_sort_log%" mkdir "%config_sort_log%
  25. if not exist "%config_sort_log%\delete" mkdir "%config_sort_log%\delete"
  26. if not exist "%config_sort_file%" (goto first_Use) else (goto choice_config)
  27. :choice_config
  28. set ERRORLEVEL=
  29. choice /C YN /M "要重新配置请在5s内输入Y" /T 5 /D N
  30. if "%ERRORLEVEL%"=="1" goto re_config
  31. goto start_main
  32. :first_Use
  33. cls
  34. echo.
  35. echo =====================欢迎试用桌面自动整理工具=========================
  36. echo        1.检测到配置文件不存在,请对本工具进行一个简单的配置
  37. echo        2.可以直接拖放文件夹到本窗口,CMD会自动获取文件夹路径
  38. echo        3.只要选定一个文件夹,每次打开工具,工具会将桌面文件移动到
  39. echo          设定的文件夹下面,按照 选定文件夹\年\年-月-日\具体文件
  40. echo          这种形式文件夹下面.
  41. echo        4.配置文件在%config_sort_dir%目录底下,日志也在此目录
  42. echo        5.关于日志,最多保存最近30天的文件,超过30天的,会移动到
  43. echo          配置文件夹log\delete目录下面,下次运行本工具的时候会
  44. echo          删除里面的所有文件,so不要放东西进去奥...
  45. echo                             欢迎试用.
  46. echo ======================================================================
  47. echo.
  48. echo ==========================配置模式选择================================
  49. echo        1.使用默认配置,自动归档桌面文件和文件夹到D:\原桌面
  50. echo        2.手工设定归档文件架
  51. echo ======================================================================
  52. echo.
  53. set /p config_style=请输入要使用的配置模式前面的数字,回车确认:
  54. set config_style=%config_style: =%
  55. if "%config_style%"=="1" goto default_config
  56. if "%config_style%"=="2" goto hands_config
  57. goto config_error
  58. :default_config
  59. echo auto_sort_dir=d:\原桌面 >>%config_sort_file%
  60. goto start_main
  61. :hands_config
  62. echo .
  63. echo 小提示:直接拖放文件夹到本窗口可以直接获取文件夹路径
  64. set /p hands_config_dir=请输入归档文件夹:
  65. rem 判断先是不是在系统盘,如果是,那就提示,这里就不判断是不是在桌面了,不好处理...关键字不能用,取前xx位判断貌似不太准,鬼知道用户的用户名多长......
  66. set input_disk=%hands_config_dir: =%
  67. set input_disk=%input_disk:~0,1%
  68. set system_disk=%systemroot:~0,1%
  69. rem 悲剧啊,找了别人写的转换大小写的批处理,活活看不懂T_T....用笨方法吧...
  70. set "code=aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ"
  71. setlocal EnableDelayedExpansion
  72. for %%i in (%code%) do (
  73. set code_T=%%i
  74. if "!input_disk!"=="!code_T:~0,1!" set input_disk=!code_T:~1,1!
  75. )
  76. for %%i in (%code%) do (
  77. set code_T=%%i
  78. if "!system_disk!"=="!code_T:~0,1!" set system_disk=!code_T:~1,1!
  79. )
  80. setlocal DisableDelayedExpansion
  81. if "%input_disk%"=="%system_disk%" goto dir_error
  82. echo auto_sort_dir=%hands_config_dir% >>%config_sort_file%
  83. goto start_main
  84. :start_main
  85. goto read_config
  86. :start_move_file
  87. if not exist "%auto_sort_dir%" mkdir "%auto_sort_dir%"
  88. if not exist "%auto_sort_dir%\%y%\" mkdir "%auto_sort_dir%\%y%\"
  89. if not exist "%auto_sort_dir%\%y%\%y%-%m%-%d%\" mkdir "%auto_sort_dir%\%y%\%y%-%m%-%d%\"
  90. echo robocopy %desktop_dir%\ %auto_sort_dir%\%y%\%y%-%m%-%d%\ /E /MOVE  /XF *.lnk
  91. robocopy %desktop_dir%\ %auto_sort_dir%\%y%\%y%-%m%-%d%\ /V /LOG+:%config_sort_log%\%y%-%m%-%d%.log /E /MOVE  /XF *.lnk
  92. if exist "%desktop_dir%\归档文件夹.lnk" del /q /f "%desktop_dir%\归档文件夹.lnk"
  93. if exist "%desktop_dir%\开始归档桌面文件.lnk" del /q /f "%desktop_dir%\开始归档桌面文件.lnk"
  94. set SrcFile=%auto_sort_dir%\%y%\
  95. set Icon=%systemroot%\System32\shell32.dll,301
  96. set LnkFile=%desktop_dir%\归档文件夹
  97. call :CreateShort "%SrcFile%" "%LnkFile%" "%Icon%"
  98. set SrcFile=%~dpnx0
  99. set Icon=%systemroot%\system32\shell32.dll,80
  100. set LnkFile=%desktop_dir%\开始归档桌面文件
  101. call :CreateShort "%SrcFile%" "%LnkFile%" "%Icon%"
  102. goto handle_logfile
  103. :handle_logfile
  104. rem 啥?这不是只删除.log文件啊,上面你说删除所有的啊......呵呵哒,吓唬你不行啊
  105. del /s /q /f %config_sort_log%\delete\*.log >>%config_sort_log%\%y%-%m%-%d%.log
  106. rem 将30天前的文件移动到delete文件夹
  107. robocopy %config_sort_log% %config_sort_log%\delete /E /MOVE /MINAGE:30 /LEV:1
  108. goto good_job
  109. :config_error
  110. cls
  111. echo .
  112. echo ========================配置模式选择错误==============================
  113. echo        很抱歉,配置模式选择错误,请重新输入
  114. echo        你的输入为: %config_style%
  115. echo ======================================================================
  116. ping 127.0.0.1 -n 3 >nul
  117. goto first_Use
  118. :dir_error
  119. cls
  120. echo .
  121. echo ========================归档路径配置错误==============================
  122. echo        很抱歉,归档路径选择错误,不允许使用系统盘,请重新配置
  123. echo        你的配置的文件夹为: %hands_config_dir%
  124. echo ======================================================================
  125. ping 127.0.0.1 -n 3 >nul
  126. goto first_Use
  127. :read_config
  128. setlocal EnableDelayedExpansion
  129. for /f "tokens=2 delims==" %%a in ('find "auto_sort_dir" "%config_sort_file%"') do (
  130. set auto_sort_dir=%%a
  131. )
  132. setlocal DisableDelayedExpansion
  133. goto del_space
  134. :del_space
  135. set space=%auto_sort_dir:~-1%
  136. if "%space%" NEQ " " (goto start_move_file) else (
  137. set auto_sort_dir=%auto_sort_dir:~0,-1%
  138. goto del_space
  139. )
  140. :CreateShort
  141. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%~2.lnk""):b.TargetPath=""%~1"":b.IconLocation=""%~3"":b.WorkingDirectory=""%~dp1"":b.Save:close")
  142. goto :eof
  143. :re_config
  144. cls
  145. setlocal EnableDelayedExpansion
  146. for /f "tokens=2 delims==" %%a in ('find "auto_sort_dir" "%config_sort_file%"') do (
  147. set auto_sort_dir=%%a
  148. )
  149. setlocal DisableDelayedExpansion
  150. echo .
  151. echo ========================当前配置==============================
  152. echo           当前配置目录:%auto_sort_dir%
  153. echo           1.重新配置
  154. echo           2.呃呃呃,按错了,放我回去
  155. echo ==============================================================
  156. echo .
  157. echo.
  158. set /p re_config_num=请输入要使用的配置模式前面的数字,回车确认:
  159. set re_config_num=%re_config_num: =%
  160. if "%re_config_num%"=="1" goto first_Use
  161. if "%re_config_num%"=="2" goto start_main
  162. :good_job
  163. cls
  164. echo .
  165. echo ========================归档完毕==============================
  166. echo                        已归档完毕
  167. echo              程序将在10s后退出,欢迎再次使用
  168. echo ==============================================================
  169. echo .
  170. ping 127.0.0.1 -n 10 >nul
  171. goto exit_me
  172. :exit_me
  173. exit
复制代码

作者: DAIC    时间: 2015-1-11 20:24

choice 和 robocopy 在微软提供的 Resource Kit Tools 工具包里面都用,直接复制到 XP 系统里面就能用。
作者: DAIC    时间: 2015-1-11 20:36

你把 %input_disk% 和 %system_disk% 转换成大写字母的目的是什么?是为了下面这句比较吗:
  1. if "%input_disk%"=="%system_disk%" goto dir_error
复制代码
如果是的话,那就没有必要转换了,直接用 if /i 就可以忽略大小写了:
  1. if /i "%input_disk%"=="%system_disk%" goto dir_error
复制代码

作者: mms0536    时间: 2015-1-11 20:50

回复 3# DAIC


    哈哈哈哈,谢谢指点




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