Computer Hope
Microsoft => Microsoft DOS => Topic started by: Dias de verano on February 21, 2009, 03:38:47 AM
-
Win2K onwards...
Wscript.echo eval(WScript.Arguments(0))
Save this script as Evaluate.vbs
Now, (cumbersome) either call it by
cscript //nologo "Path to\evaluate.vbs" "valid VBS expression" [quotes not always needed but advised]
C:\>cscript //nologo "c:\utils\evaluate.vbs" "hour(time)"
10
C:\>cscript //nologo "c:\utils\evaluate.vbs" "2/3"
0.666666666666667
C:\>cscript //nologo "c:\utils\evaluate.vbs" "time"
10:17:54
C:\>cscript //nologo "c:\utils\evaluate.vbs" "now"
21/02/2009 10:18:00
or...
(less cumbersome to use)
1. Save it somewhere on your PATH, with a name that does not duplicate any existing executable on your PATH.
2. Set cscript as the default vbs engine by executing cscript //H:cscript
3. Turn off the logo display by executing cscript //nologo /S
(These settings are saved and will persist through reboots until you alter them as described in cscript /?)
Now you can do this
C:\>evaluate "1/9"
0.111111111111111
C:\>evaluate "(100/2)*3"
150
C:\>evaluate "100/(2*3)"
16.6666666666667
C:\>evaluate "2^16"
65536
C:\>evaluate "4*atn(1)"
3.14159265358979
C:\>evaluate now
21/02/2009 10:26:24
C:\>evaluate "(4*atn(1))*(5^2)"
78.5398163397448
and in a batch... (watch out for the ^ operator - use 1 at the prompt, 2 in a batch file)
@echo off
set radius=5
set pi=(4*atn(1))
set expression=%pi%*(%radius%^^2)
for /f "delims==" %%A in ('evaluate "%expression%" ') do set answer=%%A
set area=%answer%
echo Circle radius: %radius%
echo Circle area: %area%
-
nice script Dias,
does it also work with batch variables?
-
nice script Dias,
does it also work with batch variables?
Not sure what you mean. You can feed batch variables into it. In a batch you could invoke it directly if you just wanted to show the answer or you could use FOR to get the answer into a batch variable. Above, I showed it evaluating a batch string variable like this:
set pi=(4*atn(1))
set expression=%pi%*(%radius%^^2)
for /f "delims==" %%A in ('evaluate "%expression%" ') do set answer=%%A
set area=%answer%
or...
C:\>set n1=6
C:\>set n2=5
C:\>evaluate %n1%+%n2%
11
-
^ operator
What does the ^ operator do?
-
Exponentiation. I think it escapes characters in batch so I think that has something to do with it.
I still say BCScript and BASeParser are better. They can, after all, do this:
STORE(X,{25,36,49})
STORE(Y,Sqr(-X)+X[{1,2,3} PICK 1])
BCSH@WriteLn(Y)
which would output(possibly, given use of random PICK operator):
{5i+25,6i+49,7i+36}
Supports Imaginary numbers, as well as intrinsic support for matrix operations and so forth- not to mention such novel operators such as the "PICK" operator used previous as well as nCr and nPr (number of Combinations and Number of Permutations, respectively) And ** or ^ as multiplication, Logical and boolean operations, etc.
It's going to be a tough cookie to document, though...
And I assure you it's not one line of code. Actually:
15,080 code lines and 6,863 Comment lines.
So I suppose this method wins in the terseness department...
-
nice script Dias,
does it also work with batch variables?
Not sure what you mean. You can feed batch variables into it. In a batch you could invoke it directly if you just wanted to show the answer or you could use FOR to get the answer into a batch variable. Above, I showed it evaluating a batch string variable like this:
set pi=(4*atn(1))
set expression=%pi%*(%radius%^^2)
for /f "delims==" %%A in ('evaluate "%expression%" ') do set answer=%%A
set area=%answer%
or...
C:\>set n1=6
C:\>set n2=5
C:\>evaluate %n1%+%n2%
11
thats what i meant...but its pretty good. 8)
-
Really handy - floating point math in batch scripting is a step closer (almost).
Thanks Dias.
-
Exponentiation. I think it escapes characters in batch so I think that has something to do with it.
And it also can act as a line continuation character, depending on the circumstances. So you can prettify batch scripts where the lines are very long.
@echo off
dir ^
/a-d ^
/w
But its role as a batch script control character means it needs escaping in a batch file, by the escape char which happens to be another ^ (caret) character. I have seen people call it a "carrot".
-
I've had people call it an up-arrow. Not exactly accurate, or the Asterisk, "I put my password in and I see a bunch of spiders" ::)