批处理下载全校毕业照

从Windows 95开始,Windows操作系统正式脱离了DOS。在图形界面以外,“MS-DOS方式”和“命令提示符”仍然是Windows用户常用的工具。命令行下的批处理,则是Windows系统中最方便的编程工具。


早在Windows之前,DOS中就已经有了“批处理”这个概念,批处理文件的扩展名为bat。从Windows XP开始,command.com变成了cmd.exe,命令行解释器更是增加了大量新功能,使批处理的功能更为强大;许多外部命令(需要独立exe或com程序)变成了内部命令,使批处理的性能有所提高;批处理文件的扩展名是bat或cmd。


下面,我将介绍如何用一个批处理文件下载全校的毕业照。


考察情况
上海交通大学F05级毕业生的毕业照由上海瀚源数码科技有限公司负责拍摄。拍摄后3天,学生可以登录瀚源数码网站,查询与校对本人的图像信息。查询过程中,需要输入学号和身份证号码,两者匹配才能看到照片。


我输入了自己的学号和身份证号码,成功看到我的照片,照片的地址是http://www.spring-pic.com/Images/UpPhoto/PUTONGGAOXIAO/10248我的十位学号.jpg。清空cookie,直接输入照片地址,同样可以看到我的照片;改成其他同学的学号,也可以看到相应的照片。


因此:查询照片只需通过学号构造正确的图片地址,而无需其他验证。


准备工具
wget.exe,GNU标准下载工具;从GnuWin32下载wget
花名册一份,自己找,用EXCEL等保存成CSV格式;我找到的花名册格式形如:
楼栋,房间,姓名,性别,学号,班级,备注,备注,学院
D99,999,某人姓名,男,5aabbb9ccc,Faabbbdd,,,某个学院
其中学号在第5列,文件名为su.csv
提取学号
上海交通大学的学号为十位,形式为eaabbbfccc,各数位含义如下:


e 学生类型,5=本科,1=硕士,0=博士
aa 入学年份后2位
bbb 学院代码
f 入学季节,9=秋季,1=春季
ccc 学生编号
瀚源数码网站上只有F05毕业班学生的照片,因此提取学号要完成的任务就是:读取su.csv,取出第5列的学号,将505开头的学号输出到nu.csv文件中。


rem requires cmd /v:ON
echo off
del nu.csv
:: 跳过第1行的标题;每行以,为分隔,取出第5个符号赋给%%a变量
for /f "skip=1 delims=, tokens=5" %%a in (su.csv) do (
:: %%a(即学号)赋给b变量
set b=%%a
:: b变量的前3位赋给c变量
set c=!b:~0,3!
:: 如果c变量是505,那么将b变量添加到nu.csv
if !c!==505 echo !b! >> nu.csv
)
这里要注意的是!c!这样的写法。批处理中,!变量名!表示“延迟环境变量扩充”。%c%会在执行到for语句的一开始就被扩充(扩充成空字符串),循环体中对它赋值就不会生效;而!c!则要在执行到这一行时才被扩充(扩充成学号前3位)。


默认情况下,“延迟环境变量扩充”功能并没有启用。因此,要执行上述脚本,必须用cmd /v:ON命令启动命令提示符。


执行完上面的批处理脚本后,nu.csv每行包含一个505开头的学号。


下载毕业照
有了上面的学号列表,只需对nu.csv的每一行构造出图片地址,然后调用wget下载即可。


echo off
md output
for /f %%a in (nu.csv) do if not exist output\%%a.jpg wget http://www.spring-pic.com/Images/UpPhoto/PUTONGGAOXIAO/10248%%a.jpg -Ooutput\%%a.jpg -q
:: -q参数使wget不要输出任何信息

一个小小的遗憾:如果瀚源数码网站上没有某人的照片,output目录中仍会形成一张无法打开的图片,大小为5kb以内。目前只能手工删除小于5kb的文件。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值