无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 5753|回复: 3

文件归类整理器

[复制链接]
发表于 2006-12-28 16:09:10 | 显示全部楼层 |阅读模式
  发一个比较实用的东西:

  1. @echo off
  2. mode con lines=28
  3. title 文件归类整理器-test

  4. ::===================================================================================
  5. :: 目的:
  6. ::
  7. ::     对当前目录及其所有子目录下的文件进行归类。
  8. ::
  9. :: 整理结果:
  10. ::
  11. ::   在当前目录及其子目录下,以该文件夹里的文件类型名为文件夹名,在该文件
  12. :: 所在目录下建立形如 exe文件、rar文件 之类的文件夹,不同类型的文件移动到
  13. :: 对应的文件夹下。
  14. ::   如果以后增添了新文件,再次运行本脚本时,若该位置已经存在对应的文件夹,
  15. :: 将把新添的文件保存在该文件夹下;若不存在对应的文件夹,将新建文件夹以保存
  16. :: 该文件。
  17. ::
  18. :: 已发现的问题:
  19. ::   ① move 命令无法移动 系统 或 隐藏 属性的文件;
  20. ::   ② 不会整理无类型的文件。
  21. ::
  22. :: 下一版将要实现的功能:
  23. ::
  24. ::   ① 对以当前目录为起点,指定层深的子目录进行整理;
  25. ::   ② 整理指定类型以外的文件。
  26. ::
  27. :: 更新历史:
  28. ::
  29. :: 06.12.17
  30. ::   修正了遇到无类型文件会自动退出的错误;更新了获取相对路径的代码,效率有所提升;
  31. ::
  32. :: 06.12.16
  33. ::   增添了如下功能(V1.1):
  34. ::     ① 能指定要处理的文件夹以及保存路径;
  35. ::     ② 能指定要整理的类型;
  36. ::     ③ 跳过已经整理的文件;
  37. ::
  38. :: 06.12.15
  39. ::   在只能整理当前目录下不同类型文件的基础上,写出了能对当前目录及其所有子目录下的
  40. :: 不同类型文件进行操作的代码,此为V1.0;
  41. ::===================================================================================

  42. :note
  43. cls
  44. title 文件归类整理器-说明

  45. echo                               ╭────────╮
  46. echo           ╭─────────┤  功 能 说  明  ├─────────╮
  47. echo           │                  ╰────────╯                  │
  48. echo           │                                                        │
  49. echo           │        本程序能对当前目录及其所有子目录下的文件进行    │
  50. echo           │                                                        │
  51. echo           │    归类,具体效果如下:                                │
  52. echo           │                                                        │
  53. echo           │        在当前目录及其子目录下,以该文件夹里的文件      │
  54. echo           │                                                        │
  55. echo           │    类型名为文件夹名,在该文件所在目录下建立形如        │
  56. echo           │                                                        │
  57. echo           │    exe文件、rar文件 之类的文件夹,不同类型的文件移     │
  58. echo           │                                                        │
  59. echo           │    动到对应的文件夹下,以保持原来的文件夹结构不变。    │
  60. echo           │                                                        │
  61. echo           │        如果以后增添了新文件,再次运行本脚本时,若      │
  62. echo           │                                                        │
  63. echo           │    该位置已经存在对应的文件夹,将把新添的文件保存      │
  64. echo           │                                                        │
  65. echo           │    在该文件夹下;若不存在对应的文件夹,将新建文件      │
  66. echo           │                                                        │
  67. echo           │    夹以保存该文件。                                    │
  68. echo           │                                                        │
  69. echo           ╰────────────────────────────╯
  70. echo.
  71. echo                                                按任意键进入下一步...
  72. pause>nul

  73. :config
  74. cls
  75. title 文件归类整理器-参数设置
  76. echo.
  77. echo.
  78. echo.
  79. echo.
  80. echo         请把要处理的文件夹拉到本窗口(直接回车将处理当前目录):
  81. echo.
  82. set "source_path=%cd%"
  83. set /p source_path=                 
  84. echo.
  85. echo          请输入保存位置绝对路径(直接回车将保存在源文件夹下):
  86. set destination_path=
  87. set /p destination_path=                 
  88. echo.
  89. echo             请输入要处理的文件类型,多个类型以空格分隔
  90. echo.
  91. echo                (如:rar exe;直接回车将处理所有类型):
  92. echo.
  93. set type_included=
  94. set /p type_included=                 

  95. if exist "%source_path:"=%" (
  96.     set "source_path=%source_path:"=%"
  97. ) else goto config
  98. set "source_dir=%source_path:"=%"

  99. rem ======= 计算源文件夹的层深 =======
  100. set source_layers=0
  101. set "source_dir_tmp=%source_dir%"
  102. :get_source_layers
  103. set "source_dir_tmp=%source_dir_tmp:*\=%"
  104. set /a source_layers+=1
  105. if not "%source_dir_tmp%"=="" goto get_source_layers

  106. if defined destination_path set destination=yes

  107. for /f "delims=" %%i in ('dir /a-d /b /s /oe "%source_path%"') do (
  108.     set "nx_name=%%~nxi"
  109.     call :build_dir "%%~xi" "%%~dpi"
  110.     set file_type=%%~xi
  111.     set "source_path=%%~dpi"
  112. )
  113. goto :eof

  114. rem ======= 按文件类型创建文件夹 =======
  115. :build_dir
  116. set include=
  117. for %%i in (%type_included%) do if /i "%1"==".%%i" set include=yes
  118. if defined type_included if not defined include goto :eof
  119. set types=%1
  120. if %types%=="" goto :eof
  121. set types=%types:~2,-1%

  122. if not defined destination set destination_path=%2

  123. set "destination_path=%destination_path:"=%"
  124. if not "%destination_path:~-1%"=="" set "destination_path=%destination_path%"

  125. rem ======= 获取文件在源文件中的相对位置 =======
  126. set source_sub_path=%2
  127. set "source_sub_path=%source_sub_path:"=%"
  128. set num=0
  129. :get_source_sub_path
  130. set "source_sub_path=%source_sub_path:*\=%"
  131. set /a num+=1
  132. if not %num% equ %source_layers% goto get_source_sub_path


  133. rem ======= 获取文件所在路径的目录名 =======
  134. for /f "delims=" %%i in ("%destination_path:~0,-1%") do set "source_name=%%~nxi"

  135. :: 通过对比文件类型名和文件所在路径的目录名来判断哪些文件已经整理过

  136. if "%source_name%"=="%types%文件" goto :eof

  137. :: 判断文件所在位置是否发生了变化
  138. if %2=="%source_path%" (set chang_dir=) else set chang_dir=yes&set file_type=

  139. :: 判断要处理的文件是不是批处理文件自身
  140. if "%destination_path%%nx_name%"=="%~f0" (set file_self=yes) else set file_self=

  141. :: 判断文件类型是否发生了变化

  142. if /i "%1"=="%file_type%" (set same_type=yes) else set same_type=
  143. if not defined destination set source_sub_path=

  144. if not defined chang_dir (
  145.     if not defined file_self if not defined same_type md "%destination_path%%source_sub_path%%types%文件" 2>nul
  146. ) else (
  147.     if not defined file_self if not defined same_type md "%destination_path%%source_sub_path%%types%文件" 2>nul
  148. )
  149. if not defined file_self move /-y %2"%nx_name%" "%destination_path%%source_sub_path%%types%文件"
  150. goto :eof

  151. :: source_path:源文件夹路径
  152. :: source_layers:源文件夹的层深
  153. :: destination_path:目的文件夹路径
  154. :: include:要排除的文件类型
  155. :: destination:标志变量,用来判断是否指定目的文件夹路径
  156. :: nx_name:源文件的文件名和后缀名组合
  157. :: file_type:源文件的类型
  158. :: source_sub_path:源文件相对于源文件夹的路径
  159. :: source_path_tmp:源文件夹路径的临时变量
  160. :: source_name:源文件名
  161. :: source_name_tmp:源文件名临时变量
  162. :: chang_dir:判断文件夹是否发生变化的标志
  163. :: same_type:判断文件类型是否相同的变量
  164. :: file_self:判断是不是批处理文件自身的变量
  165. :: included:要处理的文件类型
  166. :: type_included:决定是否处理当前文件类型的标志
复制代码
发表于 2007-1-3 18:55:42 | 显示全部楼层
太强了正在学习中!
回复

使用道具 举报

发表于 2007-1-3 23:11:11 | 显示全部楼层
一般 没有用
回复

使用道具 举报

 楼主| 发表于 2007-1-4 01:02:02 | 显示全部楼层
  呵呵,确实一般,不过就几条命令的组合而已;至于用处么,确实没什么,保存为txt文件可以当着一段英文来念-_-||
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 22:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表