Board logo

标题: [文件操作] [分享]批处理修改-同类文件处理 [打印本页]

作者: nlln    时间: 2011-7-1 22:22     标题: [分享]批处理修改-同类文件处理

/*代码的目的是递归的搜索某目录,将所有的txt文件按照设定的大小阈值和个数阈值
  拷贝到目标文件夹中,如果拷贝的时候出现两个同名文件要拷贝到同一个目录下,
  则修改已经拷贝完的重名文件,然后再进行拷贝。
  代码写的很繁琐,功能可以实现,请大家指导下风格或者比较简单点的实现。
   这是我自己写的第一个批处理工具,希望各位前辈不吝赐教
  我的email是[email]ssjshj@126.com[/email]
   如果有疑问或者指导的地方请回复我或者联系我的邮箱
  谢谢大家~~
*/

//////////////////////
  1. :for /r 递归搜索搜索目录
  2. @echo off
  3. setlocal ENABLEDELAYEDEXPANSION
  4. :设置文件夹内文件的大小阈值,单位是比特
  5. set MaxSize=1048576
  6. :设置文件夹内文件的个数阈值
  7. set MaxNum=10
  8. set CurrentSize=0
  9. set CurrentNum=0
  10. set count=1
  11. set repeatTag=1
  12. set extension=.txt
  13. :设置log路径,以用来自动保存list.txt
  14. set logdir=D:\log
  15. :读入源文件路径和分类好的文件存放路径
  16. set /p sourcedir=请输入源文件路径:
  17. echo @注意!如果目的文件夹已存在,会删除后重建
  18. set /p destdir=请输入目的文件夹路径:
  19. if exist %destdir% (
  20. rd /s /q %destdir%
  21. )
  22. :echo %sourcedir%
  23. :echo %destdir%
  24. for /r %sourcedir% %%i in (*.txt) do (
  25. :   @echo %%i %%~zi>>list.tmp
  26.     set tempSize=%%~zi
  27.     set fileName=%%~ni
  28.     set tempDire=%%~dpi
  29. if !CurrentSize! GTR %MaxSize% (
  30.     set /a count=!count!+1
  31.     set CurrentSize=!tempSize!
  32.     set CurrentNum=1
  33. )    
  34. if !CurrentNum! GTR %MaxNum% (
  35.     set /a count=!count!+1
  36.     set CurrentSize=!tempSize!
  37.     set CurrentNum=1
  38. )
  39. if !CurrentSize! LEQ %MaxSize% (
  40.    if !CurrentNum! LEQ %MaxNum% (
  41.        set /a CurrentSize=!CurrentSize!+!tempSize!
  42.        set /a CurrentNum=!CurrentNum!+1
  43.    )
  44. )
  45. if not exist %destdir%\!count! (mkdir "%destdir%\!count!")
  46. if exist %destdir%\!count!\!fileName!%extension% (
  47.     set hour=%time:~1,1%
  48.     set min=%time:~3,1%
  49.     set second=%time:~6,1%
  50.     set subsecond=%time:~10,1%
  51.     set newname=!hour!!min!!second!!subsecond!
  52.     pushd %destdir%\!count!&ren !fileName!%extension% !fileName!!newname!!repeatTag!%extension%&popd
  53.     set /a repeatTag=!repeatTag!+1
  54.     if !repeatTag! GTR 10000 ( set /a repeatTag=!repeatTag!-9999 )
  55. )
  56.     copy /y %%i %destdir%\!count!
  57. )
  58. if exist %logdir%\list.txt (
  59. del %logdir%\list.txt
  60. )
  61. :echo %CurrentSize%
  62. :echo %CurrentNum%
  63. :echo %count%
  64. for /l %%a in (1,1,%count%) do @echo %destdir%\%%a>>%logdir%\list.txt
  65. endlocal
  66. set MaxNum=
  67. set CurrentSize=
  68. set CurrentNum=
  69. set count=
  70. set repeatTag=
  71. set extension=
  72. pause
复制代码
//////////////////////
作者: nlln    时间: 2011-7-1 22:26

大家帮帮忙...我想学的稍微专业点
我觉得如果高手来写的话应该很简短
作者: temp    时间: 2011-7-1 22:39

本帖最后由 temp 于 2011-7-1 22:41 编辑

2# nlln
俺不懂,等高手吧

提醒一下,版规要求代码用^[code^]^[/code^]括起来,否则锁贴!效果如下:
  1. 代码... ...
复制代码

作者: CrLf    时间: 2011-7-1 23:03

本帖最后由 zm900612 于 2011-7-2 17:46 编辑

修改后基本符合版规,故删除本楼警告贴内容
作者: nlln    时间: 2011-7-2 00:19

4# zm900612
不好意思 第一次发帖 没有看版规
这样行了么
作者: ArdentMan    时间: 2011-7-2 01:00

本帖最后由 ArdentMan 于 2011-7-2 01:02 编辑

感觉以下都是多余的
EndLocal
set MaxNum=
set CurrentSize=
set CurrentNum=
set count=
set repeatTag=
set extension=
作者: Hello123World    时间: 2011-7-2 15:42

:标签做注释用很巧妙,跟%注释%异曲同工之妙。
作者: CUer    时间: 2011-7-2 16:16

bug 1:
文件名、文件夹名有空格或者感叹号可能失败

bug 2:
if exist无法直接区分文件和文件夹

风格方面:
1、一个星期之后,你回头看看自己的代码,需要多长时间才能看出第一个for循环是在哪里结束的?
2、建议学习下if ... else的用法
3、do后面的@就删掉吧,bat里面和cmd里面是不同的。
作者: nlln    时间: 2011-7-3 10:01

8# CUer
谢谢 我关注下你提的地方




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