标题: [文件操作] [分享]批处理修改-同类文件处理 [打印本页]
作者: nlln 时间: 2011-7-1 22:22 标题: [分享]批处理修改-同类文件处理
/*代码的目的是递归的搜索某目录,将所有的txt文件按照设定的大小阈值和个数阈值
拷贝到目标文件夹中,如果拷贝的时候出现两个同名文件要拷贝到同一个目录下,
则修改已经拷贝完的重名文件,然后再进行拷贝。
代码写的很繁琐,功能可以实现,请大家指导下风格或者比较简单点的实现。
这是我自己写的第一个批处理工具,希望各位前辈不吝赐教
我的email是[email]ssjshj@126.com[/email]
如果有疑问或者指导的地方请回复我或者联系我的邮箱
谢谢大家~~
*/
//////////////////////- :for /r 递归搜索搜索目录
- @echo off
-
- setlocal ENABLEDELAYEDEXPANSION
-
- :设置文件夹内文件的大小阈值,单位是比特
- set MaxSize=1048576
- :设置文件夹内文件的个数阈值
- set MaxNum=10
-
- set CurrentSize=0
- set CurrentNum=0
-
- set count=1
- set repeatTag=1
-
- set extension=.txt
-
- :设置log路径,以用来自动保存list.txt
- set logdir=D:\log
- :读入源文件路径和分类好的文件存放路径
- set /p sourcedir=请输入源文件路径:
-
- echo @注意!如果目的文件夹已存在,会删除后重建
- set /p destdir=请输入目的文件夹路径:
-
-
- if exist %destdir% (
- rd /s /q %destdir%
- )
-
- :echo %sourcedir%
- :echo %destdir%
-
- for /r %sourcedir% %%i in (*.txt) do (
- : @echo %%i %%~zi>>list.tmp
- set tempSize=%%~zi
- set fileName=%%~ni
- set tempDire=%%~dpi
- if !CurrentSize! GTR %MaxSize% (
- set /a count=!count!+1
- set CurrentSize=!tempSize!
- set CurrentNum=1
- )
-
- if !CurrentNum! GTR %MaxNum% (
- set /a count=!count!+1
- set CurrentSize=!tempSize!
- set CurrentNum=1
- )
-
- if !CurrentSize! LEQ %MaxSize% (
- if !CurrentNum! LEQ %MaxNum% (
- set /a CurrentSize=!CurrentSize!+!tempSize!
- set /a CurrentNum=!CurrentNum!+1
- )
- )
-
- if not exist %destdir%\!count! (mkdir "%destdir%\!count!")
-
-
- if exist %destdir%\!count!\!fileName!%extension% (
- set hour=%time:~1,1%
- set min=%time:~3,1%
- set second=%time:~6,1%
- set subsecond=%time:~10,1%
- set newname=!hour!!min!!second!!subsecond!
- pushd %destdir%\!count!&ren !fileName!%extension% !fileName!!newname!!repeatTag!%extension%&popd
- set /a repeatTag=!repeatTag!+1
- if !repeatTag! GTR 10000 ( set /a repeatTag=!repeatTag!-9999 )
- )
- copy /y %%i %destdir%\!count!
-
- )
-
- if exist %logdir%\list.txt (
- del %logdir%\list.txt
- )
-
- :echo %CurrentSize%
- :echo %CurrentNum%
- :echo %count%
-
- for /l %%a in (1,1,%count%) do @echo %destdir%\%%a>>%logdir%\list.txt
-
-
- endlocal
- set MaxNum=
- set CurrentSize=
- set CurrentNum=
- set count=
- set repeatTag=
- set extension=
- pause
复制代码
//////////////////////
作者: nlln 时间: 2011-7-1 22:26
大家帮帮忙...我想学的稍微专业点
我觉得如果高手来写的话应该很简短
作者: temp 时间: 2011-7-1 22:39
本帖最后由 temp 于 2011-7-1 22:41 编辑
2# nlln
俺不懂,等高手吧
提醒一下,版规要求代码用^[code^]^[/code^]括起来,否则锁贴!效果如下:复制代码
作者: 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 |