在公司做过大型项目开发的都有过深切体会,一般项目的层级目录都会很深。 设想以下情境:某次策划提了需求,你改好后需要测试,但是这些代码分布在不同的层级目录下,但是你又不能提交到服务器,这时候怎么给测试这些文件呢,
一种方法是手动去复制拷贝,然后打包传给别人--作为有点经验的程序员,为了尊严,必须要搞个自动化工具以代之
工具的组成部分: 配置 xxconfig.cmd ->主要用来配置你的项目主目录,需要提取的文件目录,以及压缩文件的目录;
files.txt -> 待提取的文件相对路径,以config.cmd 配置的主目录为参考
xxRun.bat ->执行提取任务的脚本 (一般用这个脚本就行)
xxcopy.exe ->负责把一个目录的文件拷贝到指定目录(可以下载,但也可自己编写,功能简单,就是xxcopy 命令)
xxSvnRun.bat ->执行svn更新命令,保证所要提取的是最新的(此处有点问题,如果修改的地方冲突了就麻烦了) (可选)
xxlog.txt 日志文件,用来添加你修改了什么东西
下面贴上具体的脚本文件,以及我自己写的xxcopy 源码,以后方便回顾
xxconfig.cmd脚本如下:
rem 分支名称 set branch_name=XXX rem 本地硬盘分支目录,默认:E:\XXX set local_branch_path=E:\%branch_name% rem 用户名,作为rar文件名的一部分 set username=jxq rem 加入rar.exe所在路径 set path=C:\Program Files (x86)\WinRAR rem 记录文件列表的文件名称 set fileslist=files.txt
files.txt 文件存放修改的文件相对路径
xxRun.bat 脚本如下:
1 @echo off 2 rem 设置变量延迟,关于变量延迟可参考我的另一篇小记 批处理之变量延迟 3 setlocal EnableDelayedExpansion 4 5 rem 调用环境变量脚本 6 call config.cmd 7 8 rem 建立rar的文件名,格式filename_prefix + date + username + 索引 9 set rar_title=%branch_name%_%date:~5,2%%date:~8,2%_%username% 10 :loopstart 11 set i=0 12 :loop 13 set/a i+=1 14 if !i! LSS 10 (set fn=%rar_title%_0!i!) else set fn=%rar_title%_!i! 15 if exist %cd%\%fn%.rar (goto loop) else (goto loopend) 16 :loopend 17 set rar_filename=%fn%.rar 18 19 rem 拷贝提交列表中的文件 20 rem for /f "tokens=*" %%a in (%fileslist%) do xxcopy %local_branch_path%\%%a %cd%\%branch_name%\%%a 21 for /f "tokens=*" %%a in (%fileslist%) do xxcopy %local_branch_path%\%%a %cd%\%%a 22 23 rem 生成rar 24 rem a 指打开(没有则创建)一个rar文档 25 rem -r 针对所有子目录 26 rem -ed 不添加空目录 27 rem -x 排除文件或文件夹,支持通配符,如文件 -x*.obj 目录如: -x*\mydir\* 28 rem rar a -r -ed -xrun.bat -x%fileslist% -xreadme.txt -xxxcopy.exe -x*.cmd -x*.rar %rar_filename% 29 rar a -r -ed -xrun.bat -xSvnRun.bat -xreadme.txt -xxxcopy.exe -x*.cmd -x*.rar %rar_filename% 30 31 if exist %cd%\Base rd /s/q %cd%\Base 32 if exist %cd%\Bin rd /s/q %cd%\Bin 33 if exist %cd%\Client rd /s/q %cd%\Client 34 if exist %cd%\Cluster rd /s/q %cd%\Cluster 35 if exist %cd%\Common rd /s/q %cd%\Common 36 if exist %cd%\Manager rd /s/q %cd%\Manager 37 if exist %cd%\RenderEngine rd /s/q %cd%\RenderEngine 38 if exist %cd%\Server rd /s/q %cd%\Server 39 if exist %cd%\Social rd /s/q %cd%\Social 40 if exist %cd%\test rd /s/q %cd%\test 41 if exist %cd%\Tools rd /s/q %cd%\Tools 42 if exist %cd%\UI rd /s/q %cd%\UI 43 if exist %cd%\Voice rd /s/q %cd%\Voice 44 45 46 pause
xxSvnRun.bat
这个脚本和上面的run.bat 几乎一样只不过在for循环中多加了一行 svn更新,然后再拷贝,此处不再赘述
for /f "tokens=*" %%a in (%fileslist%) do (
svn update %local_branch_path%\%%a %cd%\%%a
xxcopy %local_branch_path%\%%a %cd%\%%a
)
xxcopy.exe 代码很简单,可以使用任意语言生成可执行文件,后面有时间再贴上,你也可到网上下载现成的程序
关于工具的使用注意事项:要把整个工具文件夹放到你要操作的项目文件夹同级目录,否则提取失败
注:本文是我在博客园写的一篇文章,地址 https://i.cnblogs.com/EditPosts.aspx?postid=10145570,现移到CSDN