You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用VBScript生成test_date_time.log格式日志文件?报错求助

解决VBScript生成日志文件时的"Bad file name or number"错误

嘿,这个问题我太熟了!你碰到的Bad file name or number错误,核心原因是直接用DATETIME函数返回的字符串拼接文件名,而这些字符串里包含Windows系统不允许的特殊字符

  • DATE返回的格式里有/(比如2024/05/20
  • TIME返回的格式里有:(比如14:30:25

这两个字符都是Windows文件名的禁用字符,系统自然识别不了这个文件名,就抛出错误了。下面给你两种靠谱的解决方案:

方案1:替换非法字符

直接把日期里的/换成允许的-,时间里的:换成.或者-,这样就能生成合法的文件名:

Set objfso = CreateObject("Scripting.FileSystemObject")
' 处理日期和时间,替换非法字符
formattedDate = Replace(Date, "/", "-")
formattedTime = Replace(Time, ":", ".")
' 拼接成要求的"test_date_time.log"格式
logFileName = "test_" & formattedDate & "_" & formattedTime & ".log"
' 拼接完整路径(注意路径里的空格没问题,VBScript能识别)
logFullPath = "C:\Users\gdlabrui\Desktop\Pick_folder\programs\vbs\ex1 searchAstringAndCopyingOnTxt\" & logFileName
' 创建日志文件并写入内容
Set archivoog = objfso.CreateTextFile(logFullPath, True)
archivoog.WriteLine("日志创建时间:" & Now())
archivoog.Close

方案2:手动拼接日期时间(更可控)

如果想自定义文件名的格式(比如统一用YYYY-MM-DD_HH-MM-SS的格式),可以直接提取年、月、日、时、分、秒的分量,手动拼接,还能给单数字补前导零,让文件名更规整:

Set objfso = CreateObject("Scripting.FileSystemObject")
' 获取各个时间分量,补前导零保证格式统一
yearStr = Year(Now())
monthStr = Right("0" & Month(Now()), 2)
dayStr = Right("0" & Day(Now()), 2)
hourStr = Right("0" & Hour(Now()), 2)
minuteStr = Right("0" & Minute(Now()), 2)
secondStr = Right("0" & Second(Now()), 2)
' 拼接成标准格式的文件名
logFileName = "test_" & yearStr & "-" & monthStr & "-" & dayStr & "_" & hourStr & "-" & minuteStr & "-" & secondStr & ".log"
logFullPath = "C:\Users\gdlabrui\Desktop\Pick_folder\programs\vbs\ex1 searchAstringAndCopyingOnTxt\" & logFileName
' 创建并写入日志
Set archivoog = objfso.CreateTextFile(logFullPath, True)
archivoog.WriteLine("日志已成功生成")
archivoog.Close

额外提醒

Windows文件名禁止的字符有这些:<, >, :, ", /, \, |, ?, *,以后生成文件名时一定要避开这些字符哦。

内容的提问来源于stack exchange,提问作者4rsmet4l

火山引擎 最新活动