Vbs выдает синтаксическую ошибку. Я не могу понять, почему

#vbscript

#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:UsersmartinDesktoptxtReminderV1_0datentermin1.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 amp; "-th"
End if

msgbox "2"

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

msgbox "3"
msgbox text
  

Он должен считывать дату и время из текстового файла (имя: «termin1»), расположенного в папке и выглядящего следующим образом:

 01
07
2014
19
20
  

Я не очень далеко продвинулся.
Если я запускаю это, я получаю следующее сообщение об ошибке:
Возможно, извините за плохой перевод (я немец)

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

Так что это было бы «E» моего первого Elseif.
Но поскольку я посмотрел это на Youtube и на нескольких веб-сайтах, синтаксис правильный.
Также, хотя я вызываю echo в строке 20 («abcde»), я никогда не получаю никакого echo.
Мое единственное предположение заключается в том, что я неправильно использовал какие-либо объекты или нарушил какие-либо правила, которые я еще не знаю, потому что мне не хватает опыта.

Ответ №1:

В вашем коде есть несколько проблем.

  1. Однострочный синтаксис ( If foo Then bar ) не поддерживается ElseIf , и даже если бы это было так, вам все равно пришлось бы поместить весь оператор в одну строку. В вашем случае вы должны использовать блочный синтаксис:

     If condition1 Then
      ...
    ElseIf condition2 Then
      ...
    ElseIf condition3 Then
      ...
    Else
      ...
    End If
      
  2. eqv недопустимый оператор сравнения в VBScript. Используйте = .

  3. Day это встроенная функция, поэтому ее не следует использовать в качестве переменной. То же самое касается Month , Year , Hour и Minute . Вместо этого используйте другие имена переменных.

Подводя итог, измените это:

 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 amp; "-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 amp; "-th"
End If
  

и ошибки исчезнут.

Комментарии:

1. очень, очень полезно, спасибо. сейчас все работает. пока 🙂

Ответ №2:

Попробуйте это

 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 amp; "-th"
 End if