徐 云
(江苏省测绘工程院,江苏南京 210013)
在测绘工作和其他工作生活中,经常需要对若干文件进行批量更名,我们经常从网上下载一些软件,如“拖把更名器”等来完成这项更名工作。这些现成的软件一般比较胜任有规律的更名,如替换、添加、删除、加序等。
但是,如果原文件名和新文件名之间的关联没有简单统一的规律,只有部分规律或者几乎无规律,就不能够用拖把更名器等进行文件批量更名了。在这样的情况下,我们就可以考虑依据对照表对文件批量更名。
对照表很简单,一般有XLS,TXT两种格式。当然,在EXCEL中可以利用导入数据功能,将TXT格式转为XLS格式,也可以利用另存为CSV格式,将XLS格式转为TXT格式。
在无既有对照表的情况下,由于EXCEL软件可以插入函数、填充、排序等,用它来创建对照表比较方便,如果有现成的对照表就更加方便了。TXT格式样式为:
原图号,新图号
对照表的第1行只起标识作用,对后续工作没有影响。需要注意一个常识问题,由于文件名中不能够含有“/:*?<>|”等字符,所以,在对照表中,除第1行外,也不可以含有这些字符。
批量更名程序可以用Visual Basic编写,其窗体界面如图1所示。
首先,利用窗体左上方CommandButton控件选择对照表。点击该按钮后,程序将调用CommonDialog控件的ShowOpen方法,让我们选择对照表文件,并显示在窗体左下方,该控件的Enabled属性随即变为False。
程序随即从第2行开始读取对照表文件,直至Do While Not EOF(1)发现文件尾。对读入的每行字符按照逗号识别原文件名和新文件名,并存入已定义的二维数组。
然后,利用彼此同步的DriveListBox控件和DirListBox控件选择需更名的文件夹,经过递归搜索,需更名的文件的文件列在ListBox里。这里,由于我们把ListBox的Visible的属性设定为False,我们看不到ListBox控件。
在点击“更名”后,通过循环,程序读取ListBox里每个文件的路径和原名称,将原名称与二维数组中的原名称对照,查找出对应的新名称,加上相应的路径(必要时加后缀名),这样,有了新老文件名称及其路径,就可以用Name语句进行更名了,如:
OldName=″E:新安江测区上期成果(老图号)8645-01.dwg
NewName=″E:新安江测区 上期成果(老图号)86754500.dwg
Name OldName As NewName
图1 批量更名程序截图
选项一:对照表是否含后缀名
如果新老文件后缀名相同,对照表就可以不加后缀名,作业时选择默认的“不含”选项,否则,就必须在对照表分别写入新老文件的后缀名,并选择相应的选项。
选项二:新文件名相同的处理
一般情况下,新文件名应该是不会相同的,但可能有些特殊情况,或者编写对照表时发生个别错误,导致新文件名相同,则更名时可选择默认的加序号,如上例可能变为:
OldName=″E:新安江测区上期成果(老图号)8645-09.dwg
NewName=″E:新安江测区 上期成果(老图号)86754500-2.dwg
Name OldName As NewName
也可选择移至“重名”文件夹,即:
OldName=″E:新安江测区上期成果(老图号)8645-09.dwg
NewName=″E:新安江测区上期成果(老图号)重名86754500.dwg
Name OldName As NewName
至于退出程序选项,一般不建议使用。
选项三:对照表无原文件名
对照表无原文件名一般是由于编写对照表时有遗漏或者是该文件不需要重命名,所以,建议选择移至“未更名”文件夹,再进行个别甄别。
FileCopy OldName,NewName
最后需要特别提醒的是,如前所述,本程序采用的是重命名方式而非复制方式,所以,如果不是特别有把握,在运行程序之前,应对文件进行备份,已避免不必要的损失。当然,我们可以将程序的Name方法改为FileCopy,但对大文件就不经济了,程序运行也会慢一些。