使用VBScript按文件名年月字符串批量移动温度数据文件到对应分类目录
报错原因
800A0414错误:你把执行逻辑包裹在了Sub Dateien_verschieben()自定义过程中,但WScript.Quit是VBScript宿主的顶层方法,不允许在过程内部调用,直接移除外层的Sub定义即可解决该问题。800A0046错误:该错误属于权限/路径类错误,常见触发原因有三个:你硬编码的目标文件夹不存在、目标路径下的同名文件正在被其他程序占用、你对Temperature文件夹没有写入权限。
优化实现方案
你原有的硬编码12个月路径、单年份匹配的写法完全不适用于30年的文件处理场景,以下是可自动解析文件名、自动创建目标目录的通用方案,无需提前手动创建任何文件夹,也不需要逐个写年月变量:
Option Explicit Dim fso, sourceFolder, sourcePath, file, fileName, yearStr, monthStr, targetPath, moveCount ' 配置源文件夹路径,替换为你自己的Temperature目录完整路径 sourcePath = "C:\Users\…\Temperature" Set fso = CreateObject("Scripting.FileSystemObject") Set sourceFolder = fso.GetFolder(sourcePath) moveCount = 0 For Each file In sourceFolder.Files ' 仅筛选符合tx_YYYYMMDD.nc命名规则的文件 If LCase(fso.GetExtensionName(file.Name)) = "nc" And Left(LCase(fso.GetBaseName(file.Name)), 3) = "tx_" Then fileName = fso.GetBaseName(file.Name) ' 从文件名提取年份、月份 yearStr = Mid(fileName, 4, 4) monthStr = Mid(fileName, 8, 2) ' 生成目标路径 targetPath = sourcePath & "\T_" & monthStr & "\T_" & monthStr & "_" & yearStr ' 自动创建不存在的层级目录 If Not fso.FolderExists(targetPath) Then fso.CreateFolder targetPath End If ' 覆盖目标路径的同名文件 If fso.FileExists(targetPath & "\" & file.Name) Then fso.DeleteFile targetPath & "\" & file.Name, True End If ' 执行移动操作 fso.MoveFile file.Path, targetPath & "\" moveCount = moveCount + 1 End If Next ' 输出执行结果 If moveCount > 0 Then MsgBox "已成功移动 " & moveCount & " 个文件" Else MsgBox "未找到符合规则的文件" End If ' 释放对象 Set fso = Nothing
使用说明
- 替换代码中
sourcePath变量的取值为你本地Temperature文件夹的完整绝对路径 - 将代码保存为后缀为
.vbs的文件,右键点击选择「运行」即可执行 - 执行结束后会弹窗提示已移动的文件总数
内容的提问来源于stack exchange,提问作者ebcs
相关产品推荐
相关产品推荐

