十年前,还在学校从事研究生招生管理的工作,很难理解的是,当时的研究生招生录取,学校并未启用一体化的管理系统,所有的工作几乎都是每个阶段汇总各个学院的Excel,做成FoxPro的数据库格式上报国务院学位办的相关网站,或者是发送给学院的各个单立的系统,例如培养办的学籍系统。
有一段时间,因为考生照片的问题也比较困扰,因为在报名阶段从招生网下载的是以准考证号命名的,录取后则需要将其重命名为以编好的学号,所以每年都有几次(因为有不同类型的研究生),要做的一件事情就是凭录取数据表中的准考证号,找到考生照片,重命名为学号,丢到另一个文件夹。
在我之前从事这项工作的老师并非是计算机专业出身,所以他们通常的做法就是找几个勤工助学的学生一个个查找。我接手后,觉得还是编写个脚本来自动执行比较好,既解放学生,也免得出错。这几天刚好也看到有人问起文件批量重命名的事情,有类似之处,所以就将当时的记录搬了出来,有兴趣的朋友可以尝试一下。
这里用的是Windows Scripting Host脚本,原理就是借助一个导出的Excel文件,读取其中的旧编码,然后去查找文件夹中有无相应的照片文件,如果有就按新规则重命名,再拷贝到新文件夹中。以下是当时的原文:
最近需要将在职人员攻读硕士学位考试的考生照片进行一些处理以适应我们购买的一套管理系统,要完成两个目标:
1、将原先以“学校代码省市码报名编号.jpg“格式存储的照片转换为"报名编号.jpg"
2、按照最后正式录取考生的报名编号库来校对相应的考生的照片是否存在,存在的话就移动新文件夹中。如果不存在,就写到日志文件里去。
以下是实现的脚本,说明:
log.txt为日志文件
ksbh.xls为一个存储考生编号的EXCEL表格,默认只存了一列:”准考证号"
'--------------------------------------
'|Author :GF.Ruan |
'|E-mail:zjlester@gmail.com |
'|Homepage:http://hi.baidu.com/ileo |
'|Zhejiang Normal University |
'|本脚本可以自由分发,但请保留署名,谢谢.|
'|-------------------------------------|
Wscript.Echo "操作即将开始,本操作占用大量系统资源,请尽可能关闭其它程序"
'操作日志保存到Log.txt文件
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("C:\script\All\Log.txt", ForAppending, True)
'更改照片文件名,更改后的命名规则为“准考证号.jpg”,适用于在职人员攻读硕士学位报名照片库更改
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\script\All\oriPic'} Where " _
& "ResultClass = CIM_DataFile")
For Each objFile In colFiles
strEnd = Right(objFile.Name, 14)
strNewName = objFile.Drive & objFile.Path& strEnd
errResult = objFile.Rename(strNewName)
Next
Wscript.Echo "改名操作完成!按确定开始判断图像匹配"
'打开存放考生编号的excel
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open _
("C:\script\All\ksbh.xls")
'定义开始读取的行数
intRow = 2
Do Until objExcel.Cells(intRow,1).Value = ""
strFileName="C:\script\All\oriPic\"&objExcel.Cells(intRow,1)&".jpg"
If objFSO.FileExists(strFileName) Then
'定义目标文件夹
objDirectory="c:\script\All\NewPic\"
objFSO.MoveFile strFileName ,objDirectory
'也可以在Excel中将考生的其它信息如姓名一并存放,用objExcel.Cells(intRow,n)读取写到日志中.
objTextFile.WriteLine ("行"&intRow&":考生"&objExcel.Cells(intRow,1).Value&"照片已经移至"&objDirectory)
Else
'找不到照片时也写入日志
objTextFile.WriteLine("行"&intRow&"考生:"&objExcel.Cells(intRow,1)&"照片文件无法找到")
End If
intRow = intRow + 1
Loop
objExcel.Quit
objTextFile.Close
Wscript.Echo "执行完毕!"
最早发布于自己的百度空间(现在已经不存在了,这些年,百度干了些什么?)。