Board logo

标题: [文件管理] 批处理文件分类整理器[2008-8-4] [打印本页]

作者: namejm    时间: 2008-8-4 21:21     标题: 批处理文件分类整理器[2008-8-4]

  有些时候,我们需要对某个目录及其所有子目录下的文件按类型进行整理。搜遍网络,没有找到趁手的小工具;在电脑里翻箱倒柜,找到了自己以前写的一段代码,经过一些完善,发出来大家玩玩;如发现bug,或有更好的玩法,欢迎跟帖交流。
  1. @echo off
  2. :: code by namejm bbs.bathome.net  CMD@XP_SP2 2008.8.4
  3. color 1f
  4. mode con lines=30
  5. set TT=文件分类整理器
  6. rem ======= 设置选项 =======
  7. :set_source
  8. cls
  9. title %TT%-当前目录:"%cd%"
  10. echo.&echo.
  11. call :note
  12. echo.&echo.
  13. echo               请把要处理的文件夹拉到本窗口(直接回车将处理当前目录):
  14. echo.
  15. set "source=%cd%"
  16. set /p source=                 
  17. if defined source (
  18.     set "source=%source:"=%"
  19. ) else goto set_source
  20. if "%source%"=="1" goto set_source
  21. if "%source%"=="0" exit
  22. if exist "%source%" (
  23.     pushd "%source%" 2>nul && popd || goto set_source
  24. )
  25. :set_destination
  26. title %TT%-源文件路径:"%source%"
  27. cls
  28. call :note
  29. echo.
  30. echo               请输入保存位置的绝对或相对路径,或把目的文件夹拖到本窗口
  31. echo.
  32. echo               直接回车将处理当前目录;
  33. echo.
  34. echo               若目的路径从属于或等同于源路径,或存在同名的非文件夹路径
  35. echo.                             则必须重新选择:
  36. echo.
  37. set destination=
  38. set /p destination=                 
  39. if defined destination set "destination=%destination:"=%"
  40. if defined destination (
  41.     if "%destination%"=="1" goto set_source
  42.     if "%destination%"=="0" exit
  43. ) else goto set_destination
  44. echo "%destination%"|findstr ":" || (
  45.     set "destination=%cd%\%destination%"
  46. )
  47. :: 检测是否存在同名的非文件夹路径
  48. if exist "%destination%" (
  49.     pushd "%destination%" 2>nul && popd || goto set_destination
  50. )
  51. :: 判断目的路径是否从属于或等同于源路径
  52. set flag=
  53. call set "flag=%%destination:%source%=%%"
  54. if not defined flag goto set_destination
  55. if "%flag:~0,1%"=="\" goto set_destination
  56. md "%destination%" 2>nul
  57. :set_type
  58. title %TT%-目的路径:"%destination%"
  59. cls
  60. echo.&echo.
  61. call :note
  62. echo.
  63. echo                   请输入要处理的文件类型,多个类型以空格分隔
  64. echo.
  65. echo                     (如:rar exe,直接回车将处理所有类型):
  66. echo.
  67. set type=
  68. set /p type=                     
  69. if defined type (
  70.     if "%type%"=="1" goto set_destination
  71.     if "%type%"=="0" exit
  72.     for %%i in (%type%) do set /p type=*.%%i <nul>nul
  73. ) else set type=*.*
  74. rem ======= 按文件类型复制文件 =======
  75. cd /d "%source%"
  76. for /f "delims=" %%i in ('dir /a-d /b /s %type% 2^>nul') do (
  77.     title %TT%-正在处理 "%%i"
  78.     set "file_souce=%%i"
  79.     set "file_destination=%destination%\%%~xi文件\%%~nxi"
  80.     md "%destination%\%%~xi文件" 2>nul
  81.     if not exist "%destination%\%%~xi文件\%%~nxi" (
  82.         copy "%%i" "%destination%\%%~xi文件">nul
  83.     ) else (
  84.         set num=0
  85.         call :rename "%%i" "%destination%\%%~xi文件\%%~ni" "%%~xi"
  86.     )
  87. )
  88. exit
  89. rem ======= 重命名同名文件 =======
  90. :rename
  91. set /a num+=1
  92. set "file_source=%~1"
  93. set "file_destination=%~2_%num%%~3"
  94. if not exist "%file_destination%" (
  95.     copy "%file_source%" "%file_destination%">nul
  96. ) else goto rename
  97. goto :eof
  98. :note
  99. echo                               ╭────────╮
  100. echo           ╭─────────┤  功 能 说  明  ├─────────╮
  101. echo           │                  ╰────────╯                  │
  102. echo           │                                                        │
  103. echo           │        本程序能对当前目录及其所有子目录下的文件进行    │
  104. echo           │                                                        │
  105. echo           │    归类,具体效果如下:                                │
  106. echo           │                                                        │
  107. echo           │        在指定目录下,以指定的文件类型名为文件夹名      │
  108. echo           │                                                        │
  109. echo           │    建立形如 .exe文件、.rar文件 之类的文件夹,不同      │
  110. echo           │                                                        │
  111. echo           │    类型的文件复制到对应的文件夹下,并自动重命名同      │
  112. echo           │                                                        │
  113. echo           │    名文件:如有重名,则直接在文件名后加"_序号"。       │
  114. echo           │                                                        │
  115. echo           ╰────────────────────────────╯
  116. echo.
  117. echo               返回上一步请按 1                         退出请按 0
  118. echo.           ─────────────────────────────
  119. goto :eof
复制代码

作者: batman    时间: 2008-8-4 21:28

顶,好东西!!!
作者: 鹤冲天    时间: 2008-8-4 21:34

学习学习!!
作者: zhoumeng    时间: 2008-8-4 21:36

厉害!
学习了~~~好好!
又一个问题被namejm了

[ 本帖最后由 zhoumeng 于 2008-8-4 22:07 编辑 ]
作者: pusofalse    时间: 2008-8-4 23:10

厉害!~
作者: foxJL    时间: 2008-8-4 23:24

很实用,顶了..
作者: 狱渊    时间: 2013-4-29 15:33

我刚好需要啊
作者: wdh123    时间: 2016-7-28 21:26

回复 1# namejm


    超级强大




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