Vbs抛出语法错误。我不明白为什么

时间:2014-07-02 11:41:20

标签: vbscript

我收到语法错误,但我不明白为什么。 我目前正在用vbs编写一些脚本,而且我是vbs的新手。 由于这个脚本的行为让我困惑,我知道我做错了什么。 这是我的代码:

Option Explicit

Const read =1,overwrite=2,append=8 'constants for parameters of OpenTextFile command

Dim fos,i,ofile,text,month,day,year,hour,minute,day2

Set fos =CreateObject("Scripting.FileSystemObject")
'fos.OpenTextFile("path",type)

ofile =fos.OpenTextFile("C:\Users\martin\Desktop\txt\ReminderV1_0\daten\termin1.txt",1)

'read a date from a txt file
day=ofile.readline
month=ofile.readline
year=ofile.readline
hour=ofile.readline
minute=ofile.readline
set ofile=ofile.close

wscript.echo "abcde" 'i never get a messagebox "abcde" and i dont know why

If day eqv "01" then day2="first" 'use of eqv or = seems to be meaningless
ElseIf day="02"  day2="second" 
ElseIf day="03"  day2="third"
Else day2=day & "-th"
End if

msgbox "2"

text="the " & day2 & " of "& month & " " & year & " at "& hour &":"& minute &" o'clock"

msgbox "3"
msgbox text

它应该从位于文件夹中的txt文件(名称:" termin1")中读取日期和时间,如下所示:

01
07
2014
19
20

我还没到达。 如果我运行这个我收到以下错误信息: 抱歉翻译不好(我是德国人)

Line: 23
token/char: 5
Error: Syntaxerror
Code: 800A03EA
Source: Compilationerror in Microsoft VBScript

那就是" E"我的第一个Elseif。 但是自从我在Youtube和几个网站上查找语法是正确的。 即使我在第20行调用回声(" abcde"),我也从未得到任何回声。 我唯一的猜测是,我使用了任何错误的对象或违反了我还不知道的任何规则,因为我缺乏经验。

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

  1. 单行语法(If foo Then bar)不支持ElseIf,即使这样做,您仍然需要将整个语句放在一行中。在您的情况下,必须使用块语法:

    If condition1 Then
      ...
    ElseIf condition2 Then
      ...
    ElseIf condition3 Then
      ...
    Else
      ...
    End If
    
  2. eqv不是VBScript中的有效比较运算符。使用=

  3. Day是一个内置函数,因此它不应该用作变量。 MonthYearHourMinute也是如此。改为使用不同的变量名称。
  4. 总结一下,改变一下:

    day=ofile.readline
    month=ofile.readline
    year=ofile.readline
    hour=ofile.readline
    minute=ofile.readline
    set ofile=ofile.close
    
    wscript.echo "abcde" 'i never get a messagebox "abcde" and i dont know why
    
    If day eqv "01" then day2="first" 'use of eqv or = seems to be meaningless
    ElseIf day="02"  day2="second" 
    ElseIf day="03"  day2="third"
    Else day2=day & "-th"
    End if
    

    进入这个:

    dayRead    = ofile.ReadLine
    monthRead  = ofile.ReadLine
    yearRead   = ofile.ReadLine
    hourRead   = ofile.ReadLine
    minuteRead = ofile.ReadLine
    ofile.Close
    
    Wscript.Echo "abcde"
    
    If dayRead = "01" Then
      day2 = "first"
    ElseIf dayRead = "02" Then
      day2 = "second"
    ElseIf dayRead = "03" Then
      day2 = "third"
    Else
      day2 = dayRead & "-th"
    End If
    

    并且错误将消失。

答案 1 :(得分:0)

试试这个

If day = "01" then day2="first" 'use of eqv or = seems to be meaningless
  ElseIf day="02"  then day2="second" 
  ElseIf day="03" then day2="third"
  Else day2=day & "-th"
 End if