如何用VBScript生成test_date_time.log格式日志文件?报错求助
解决VBScript生成日志文件时的"Bad file name or number"错误
嘿,这个问题我太熟了!你碰到的Bad file name or number错误,核心原因是直接用DATE和TIME函数返回的字符串拼接文件名,而这些字符串里包含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




