您好,NA。NA,您知道吗,我们为您感到难过。为什么呢?是这样,一方面,您的幸运令人难以置信。要知道,脚本专家们从不编写他们实际使用的脚本,但例外情况却莫名其妙地让您给撞上了。一定要谈一谈您是怎么做到的!不过,同时您的不幸也令人难以置信:要知道,宇宙的力量完全站在您这一边,您本应为自己买一注彩票,却选择向脚本专家们发问,从而用尽了所有的好运气。哎!
两年前,有个脚本专家去日本观看他儿子的棒球比赛。(我们面对现实吧,这位脚本专家所做的每件事几乎都有棒球倾向。)在日本时,我们的脚本专家拍摄了大量数字照片,这些照片被自动指定了 100_1023.jpg 和 100_1024.jpg 这样的名称。这位脚本专家太懒了,不原意为每张照片逐一重命名,但他确实认为至少将图片名称修改一下,让他能够区分图片是属于日本棒球照片集可能会有好处。换句话说,他想要将拍摄时命名为 100_1023.jpg 的照片重命名为 Japan_1023.jpg。无论您是否相信,他实际上是使用脚本来执行这项任务的。
你们认为脚本专家们高谈阔论却不付诸行动。
但在这位脚本专家身上并非如此(或者说,至少在这件事上并非如此)。实际情况是,他使用了一个与以下脚本极为相似的脚本来重命名他的图片文件:
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:/Photos'} Where " _
& "ResultClass = CIM_DataFile")
For Each objFile In colFiles
strEnd = Right(objFile.Name, 8)
strNewName = objFile.Drive & objFile.Path & "272_DSC_" & strEnd
errResult = objFile.Rename(strNewName)
Next
此处需注意两点。其一,我们假设您要重命名特定文件夹中的所有文件。如果不是这种情况,则必须加入其他代码以滤除不应重命名的文件。其二,我们假设每张照片均以四位数字结尾,且文件扩展名为 .jpg。如果不是这种情况,(例如,如果文件有 _JKG1.jpg 这样的名称),则该特定脚本对您将没什么帮助。对于具有这样名称的文件,仍然可以将它们重命名,不过代码要略为复杂。但由于我们所熟悉的所有数字照相机都是在文件名称尾部附加四位数字,我们假设这对您也适用。
脚本先是连接到本地计算机上的 WMI 服务,然后使用 Associators Of 查询返回文件夹 C:/Photos 中所有文件的集合:
Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:/Photos'} Where " _
& "ResultClass = CIM_DataFile")
不可否认,Associators Of 查询的样子怪怪的。但不必在乎它,将 C:/Photos 替换为图片文件的路径即可,将所有其他内容保持原样。
接着,我们使用以下这个代码块遍历图片文件集合:
For Each objFile In colFiles
strEnd = Right(objFile.Name, 8)
strNewName = objFile.Drive & objFile.Path & "272_DSC_" & strEnd
errResult = objFile.Rename(strNewName)
Next
在该循环内,我们查看第一个文件的 Name;它类似于 C:/Photos/_JKG1234.jpg。(在 WMI 中,文件的 Name 属性就是我们所称的文件路径。)然后,我们使用 VBScript 的 Right 函数获取 Name 中最右侧的八个字符;在本例中,这些字符是 1234.jpg (C:/Photos/_JKG1234.jpg)。这些是我们要保留的八个字符(我们不想更改编号或文件扩展名),因此我们将其存储在名为 strEnd 的变量中。
接下来,要为我们的文件构建一个新名称;以下代码就用来执行此操作:
strNewName = objFile.Drive & objFile.Path & "272_DSC_" & strEnd
使用 WMI 重命名文件时,需要指定完整的文件路径,不能只是重命名类似于 NewName.jpg 的文件。因此,我们需要将该文件的驱动器号 (C:)、路径(按照 WMI 术语,是不含驱动器号的文件夹路径,或 /Photos/)、新文件名前缀 (272_DSC_) 及我们从现有文件名中保留的八个字符连接在一起。换句话说:
C: + /Photos/ + 272_DSC_ + 1234.jpg
将它们都放在一起,而得到的将是 C:/Photos/272_DSC_1234.jpg。这很好,因为这正是我们所需的新文件路径。
接下来,我们调用 Rename 方法即可,调用时将新文件路径作为唯一的方法参数进行传递。然后进入下一轮循环,对集合中的其余文件重复此过程。
NA,您知道吗?我们同意您的观点:像这样的知识远比中奖彩票有价值。请不断提醒自己:这样做有价值得多。