objFile.Write(Now)无效的过程调用或参数

时间:2017-09-13 15:53:57

标签: vbscript

我收到类似"第10行和第2行的错误。无效的程序调用或参数"我在VBS以下运行

第10行和第2章。

Const ForAppending = 8
Set objFSO = CreateObject("scripting.filesystemobject")
GetLogPath = "C:\Users\MyName\Desktop\New Text Document.log"
If objFSO.FileExists(GetLogPath) Then
    set objFile = objFSO.OpenTextFile(GetLogPath)
else
    set objFile = objFSO.CreateTextFile(GetLogPath)
End If
set objFile = objFSO.OpenTextFile(GetLogPath , ForAppending)
    objFile.Write(FormatDateTime(Now))
    objFile.WriteLine(" : ")
    objFile.Close

我的系统日期和时间设置如下。

Bulgaria Date and Time settings

但是当我在其他PC上运行相同的脚本并且工作正常时包含英语日期和时间设置。

< OutPut > 9/13/2017 5:44:15 PM:

请你帮忙解决这个案子。

2 个答案:

答案 0 :(得分:0)

错误原因:错误编码格式

您收到错误的原因是您尝试写入文本文件的文本是保加利亚语,而您的文本文件的编码是ANSI(请参阅图片)默认情况下 。解决方案是将文件保存为通用编码, Unicode或UTF-8 。这些编码将保加利亚字符映射到Unicode标准。您必须以Unicode格式打开/创建日志文件才能写保加利亚字符。

经过测试的代码:

Const ForAppending = 8
Set objFSO = CreateObject("scripting.filesystemobject")
GetLogPath = "C:\Users\Kira\Desktop\url.log"

'The entire If condition of your code can be replaced with the following line of code:
Set objFile = objFSO.OpenTextFile(GetLogPath,ForAppending,True,-1)      'The 3rd parameter "True" is for creating the textfile if the textfile is already not created and the 4th parameter  is for specifying the Encoding format. -1 means Unicode; for ANSI, leave the last param blank.

objFile.Write(FormatDateTime(Now))
objFile.WriteLine(" : ")
objFile.Close

<强>输出:

enter image description here

如需更多帮助,请点击HERE

编码格式:

Encoding

答案 1 :(得分:0)

@Gurman感谢您的宝贵解决方案。一些我无法实现您的解决方案。所以我写了下面的函数(Function GetNow())来实现我的要求。

Const ForAppending = 8
strComputer = "."
Set objFSO = CreateObject("scripting.filesystemobject")
GetLogPath = "C:\Users\MyName\Desktop\New Text Document.log"
If objFSO.FileExists(GetLogPath) Then
    set objFile = objFSO.OpenTextFile(GetLogPath)
else
    set objFile = objFSO.CreateTextFile(GetLogPath)
End If
set objFile = objFSO.OpenTextFile(GetLogPath , ForAppending)
    objFile.Write(GetNow)
    objFile.WriteLine(" : ")
    objFile.Close

Function GetNow()

Set objWMIServiceNow = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIServiceNow.ExecQuery("Select * from Win32_OperatingSystem")

For Each objItem in colItems
   dtmLocalTime = objItem.LocalDateTime
   dtmMonth = Mid(dtmLocalTime, 5, 2)
   dtmDay = Mid(dtmLocalTime, 7, 2)
   dtmYear = Left(dtmLocalTime, 4)
   dtmHour = Mid(dtmLocalTime, 9, 2)
   dtmMinutes = Mid(dtmLocalTime, 11, 2)
   dtmSeconds = Mid(dtmLocalTime, 13, 2)
Next

GetNow = dtmMonth & "/" & dtmDay & "/" & dtmYear & " [" & dtmHour & ":" & dtmMinutes & ":" & dtmSeconds & "]"

End Function

感谢您的所有时间和支持:)

拉​​梅什