在 1 行 VBS 中计算

Calculation in 1 line VBS

如果用户输入 1+1,我怎样才能让这个计算器工作? 它只有在我输入 1 + 1 时才有效;C 计算必须在 1 行中。

x = inputbox("Calculation", "Calculator", "1+1")
y = Split(x)
if not isnumeric (y(0)) then 
wscript.quit 
end if 
if not isnumeric (y(2)) then 
wscript.quit 
end if 
if y(1) = "+" then
z = int(y(0)) + int(y(2))
msgbox(z)
end if
if y(1) = "-" then
z = int(y(0)) - int(y(2))
msgbox(z)
end if
if y(1) = "*" then
z = int(y(0)) * int(y(2))
msgbox(z)
end if
if y(1) = "/" then
z = int(y(0)) / int(y(2))
msgbox(z)
end if
if y(1) = "%" then
z = int(y(0)) MOD int(y(2))
msgbox(z)
end if

感谢您的回答!

尝试下一个代码片段(注释解释):

Dim ii, sOperator, strExpr, y 
strExpr = inputbox("Calculation", "Calculator", "1+1")

' insert spaces around all operators
For Each sOperator in Array("+","-","*","/","%")
  strExpr = Trim( Replace( strExpr, sOperator, Space(1) & sOperator & Space(1)))
Next
' replace all multi spaces with a single space 
Do While Instr( strExpr, Space(2))
  strExpr = Trim( Replace( strExpr, Space(2), Space(1)))
Loop

y = Split(strExpr)
''' your script continues here

另一种方法(允许超过纯粹的算术操作)使用Eval Function (which evaluates an expression and returns the result) and basic error handling:

option explicit
On Error GoTo 0

Dim strResult: strResult = Wscript.ScriptName
Dim strExpr, strInExp, strLastY, yyy
strInExp = "1+1"
strLastY = ""
Do While True

  strExpr = inputbox("Last calculation:" & vbCR & strLastY, "Calculator", strInExp)

  If Len( strExpr) = 0 Then Exit Do 

  ''' in my locale, decimal separator is a comma but VBScript arithmetics premises a dot  
  strExpr = Replace( strExpr, ",", ".")   ''' locale specific

  On Error Resume Next             ' enable error handling
  yyy = Eval( strExpr)
  If Err.Number = 0 Then
    strInExp = CStr( yyy)
    strLastY = strExpr & vbTab & strInExp
    strResult = strResult & vbNewLine & strLastY
  Else
    strLastY = strExpr & vbTab & "!!! 0x" & Hex(Err.Number) & " " & Err.Description
    strInExp = strExpr
    strResult = strResult & vbNewLine & strLastY
  End If
  On Error GoTo 0                  ' disable error handling
Loop

Wscript.Echo strResult
Wscript.Quit

示例输出:

==> cscript //NOLOGO D:\VB_scripts\SO934370.vbs
39934370.vbs
1+1     2
2/4     0,5
0.5**8  !!! 0x3EA Syntax error
0.5*8   4
4=4     True
True+5  4
4=5     False
False+5 5
5       5

==>

我找到了一个更简单的方法,如果有多个文件并不重要,你可以将它记录到 .txt 文件并批量使用“set /a”来简单地计算它。

在vbs文件中:

calculation = inputbox("What do you want to calculate?(include =)", "Eclips-Terminal Calculator")
oFile.write "" & calculation & ""
oFile.close
wsh.run "calculator.bat"
wscript.sleep 3000
msgbox rfile.readall
oFile.close

批处理文件中(calculator.bat):

@echo off
set /p math=<RAM.txt
set /a calculation=%math%
echo. >> RAM.txt
echo %calculation% >> RAM.txt

然后是一个名为“RAM.txt”的文本文件。 这是我的漂亮、干净和简单的方法,不太难实现。

编辑:我知道这是一个已有 4 年历史的问题,我只是找不到简单的解决方法,所以我将其添加到此处以便其他人可以找到它。