用bat做了个跨版本更新包的生成脚本,由于之前都是写一些很简单bat,或者python里使用windows命令,所以纯用bat做这个东西,还是有点复杂的。

过程中遇到很多问题,主要是参数太多,变量的使用也很奇怪。所以做一下笔记,以后遇到问题可以来查一下。

 1 @echo off ::关闭执行命令显示
2 setlocal enableDelayedExpansion ::开启延时扩展
3
4 set /p zipspath=输入要处理的压缩包文件目录:
5 if not exist %zipspath% (
6 echo %zipspath%不存在
7 pause
8 )
9 ::zipssort ::对文件夹里的zip文件排一下字典序
10 set fnum=0
11 for /f %%A in ('dir /b/on %zipspath%') do ( ::遍历一个路劲,/b/on都是过滤选项 /b只文件名 /o排序 n是/o的属性,表示字典序
12 set /a fnum+=1 ::set 产生变量和修改变量值 /a 说明变量的值是一个表达式的值,不然就是一个字符串了
13 set zfiles!fnum!=%%A ::生成类似数组的结构,但是bat没有数组,所以使用a1,a2,a3...这种形式的变量模仿
14 )
15
16 ::unzipandcombine
17 if exist %zipspath%\..\zipsout_deals rd /s/q %zipspath%\..\zipsout_deals ::rd /s/q ::删除一个文件夹,/s递归删除包括子目录 /q不询问
18 set /a flen=!fnum! ::延时变量的使用需要!!括起来
19 set /a endi=!fnum!-1
20 for /l %%i in (1,1,%endi%) do ( ::必须用endi的变量保存!fnum!-1的值才能在循环结构中使用
21 set fn1=!zfiles%%i:~0,-4! ::!xxx:~0,-4! 字符串截取操作,从第一个字符到倒数第4个字符(不包括)之前
22 set fn2=!zfiles%flen%:~0,-4!
23 set zdir=%zipspath%\..\zipsout_deals\!fn1!_!fn2!
24
25 if exist !zdir! rd /s/q !zdir!
26 md !zdir!
27
28 for /l %%j in (%%i,1,!fnum!) do ( :: /l表示以增量的形式从开始到结束的一个数字序列,1是步长
29 unzip -o %zipspath%\!zfiles%%j! -d !zdir! ::zip.exe和unzip.exe 可在http://stahlworks.com/dev/index.php?tool=zipunzip下載
30 )
31 )
32
33 ::zip
34 set zd=%zipspath%\..\zipsout_deals ::bat的cd比较恶性,无法跨盘符,所以需要先声明盘符
35 %zd:~0,2%
36 cd %zd%
37 for /f %%Z in ('dir /b /ad-h %zd%') do (
38 cd %%Z
39 zip -r ..\%%Z.zip .\* ::-r 压缩的时候能够带上子目录 ,注意zip -r a.zip ./a ,如果./a是个路径,会把a也压缩进a.zip 如:a.zip/a/1.txt,所以先进入,再压缩。
40 cd ..\
41 rd /s/q %%Z
42 )
43 pause

bat还是相当不友好的,和shell没法比,所以win上还是用python吧。

最新文章

  1. Git分布式版本控制教程
  2. 【10-25】intelliji ide 学习笔记
  3. IOS App 右上脚红色数字提醒
  4. Macbook下virtualenv无法使用解决办法
  5. jqueyr获取动态创建的元素
  6. [fortify] 变量覆盖漏洞
  7. C#堆栈和托管堆
  8. ThreadLocal实现session中用户信息 的线程间共享(精)
  9. Android开发之AlertDialog
  10. TCP连接的状态分析
  11. 防止DC电源反接的方法——SS14的用法
  12. cocos2d-x删除vs2010项目模板
  13. perl学习(2) 基本数据类型等
  14. chrome主页被篡改为360该溶液的导航
  15. 例如找出令人信服的权威C++中间malloc与new
  16. JavaFX基础学习之OkHttp/Gson
  17. SpringBoot之彩色输出
  18. 关系类型字段 -- Django从入门到精通系列教程
  19. JS的replace默认只替换第一个匹配项
  20. Git:四、连接GitHub远程仓库

热门文章

  1. erlang创建100万个进程,每一个进程花费多少时间呢?
  2. android中常用的注解说明
  3. [VBA]汇总多个工作簿的指定工作表到同一个工作簿的指定工作表中
  4. Selenium 2自动化测试实战17(警告框处理)
  5. PP相关号码范围IMG设定
  6. PHP 异步执行方式
  7. elasticsearch mappings之dynamic的三种状态
  8. 【VS开发】修改MainFrame窗口名称1
  9. ROS安装(国内源)
  10. OpenTSDB查询和写入毫秒级数据