如何用VBScript将文件夹修改日期同步为内部MP4文件的修改日期?
解决文件夹修改日期同步为内部MP4文件日期的VBScript问题
针对你的需求——把每个子文件夹的修改日期同步为其内部MP4文件的修改日期,我先帮你分析原代码里的几个关键问题,再给出修正后的可用脚本:
原代码的核心错误
- 变量顺序与命名冲突:你先声明了
objFile作为FileSystemObject,但后面又用同名变量遍历文件,导致变量混淆;而且strDir的赋值在objFolder = objShell.NameSpace(strDir)之后,这会直接导致脚本报错。 - 逻辑指向错误:你试图修改
objFolder.Items.Item(strDir)的日期,但objFolder是根文件夹,这里的逻辑完全没有定位到目标子文件夹;另外DateLastModified没有指定所属对象,脚本不知道要取哪个文件的日期。 - 遍历对象错误:原代码遍历的是根文件夹的所有项,但没有区分哪些是子文件夹,直接处理所有项会导致非文件夹的项被错误处理。
修正后的VBScript代码
' 创建FileSystemObject对象用于文件系统操作 Dim fso, rootFolder, subFolder, file Set fso = CreateObject("Scripting.FileSystemObject") ' 指定要处理的根文件夹路径 Set rootFolder = fso.GetFolder("C:\Temp") ' 遍历根文件夹下的所有子文件夹 For Each subFolder In rootFolder.SubFolders ' 遍历当前子文件夹内的所有文件 For Each file In subFolder.Files ' 判断是否为MP4文件(不区分大小写) If UCase(fso.GetExtensionName(file.Name)) = "MP4" Then ' 将子文件夹的修改日期设置为该MP4文件的修改日期 subFolder.DateLastModified = file.DateLastModified WScript.Echo "已同步文件夹 [" & subFolder.Name & "] 的修改日期为MP4文件的日期" ' 每个文件夹只有一个MP4,找到后直接跳出内层循环 Exit For End If Next Next ' 释放对象 Set file = Nothing Set subFolder = Nothing Set rootFolder = Nothing Set fso = Nothing
代码说明
- 用
fso作为FileSystemObject的变量名,避免和遍历文件的file变量冲突。 - 先遍历根文件夹下的所有子文件夹,确保只处理目标文件夹。
- 在每个子文件夹内遍历文件,找到MP4后直接同步日期并跳出内层循环(因为你提到每个文件夹只有一个MP4)。
- 明确指定
subFolder.DateLastModified和file.DateLastModified,确保属性赋值正确。
运行方式
保存上述代码为CopyDateToParent.vbs,然后在命令行执行:
cscript CopyDateToParent.vbs
脚本会逐个处理C:\Temp下的子文件夹,同步完成后会输出提示信息。
内容的提问来源于stack exchange,提问作者StrangerThings
相关产品推荐
相关产品推荐

