Batch-Jscript混合计算器

时间:2014-01-27 21:52:42

标签: batch-file jscript

这是我的代码:

@if (@codesection==@batch) @then
@echo off
title 

C:
cd %windir%\System32
set c=echo 
:a
%c%abs: Absolute Value
%c%atn: Arctangent
%c%cos: Cosine in Degrees
%c%exp: e Raised to the Power of
%c%hex: Hexadecimal Value
%c%int: Integer Part
%c%log: Natural Logarithm
%c%oct: Octal Value
%c%rnd: Random Number from (0,1)
%c%sgn: Sign
%c%sin: Sine in Degrees
%c%sqr: Square Root
%c%tan: Tangent in Degrees
echo.
if defined a goto b
set /p a=
cls
for /f %%G in ('cscript //nologo //e:jscript "%~f0" "%a%"') do set b=%%G
goto a
:b
%c%%a%=%b%
echo.

goto:eof
@end
WScript.Echo("Math."+WScript.Arguments(0));

我不明白我在哪里使用不正确的语法,如果有人可以帮我调整这个脚本,我会非常感激。

2 个答案:

答案 0 :(得分:3)

您的代码存在一些问题。 JScript中的所有数学函数都必须使用以下格式编写:Math.function(argument),例如:Math.sqrt(25);您可以查阅此格式的说明here

在JScript中,WScript.Echo函数,所以它使用括号括起参数:

WScript.Echo(eval(WScript.Arguments(0)));

请参阅this post

在分隔goto :EOF之前需要@end,否则JScript代码将作为批处理执行!

编辑回复评论

您没有说明所需的输出是什么,因此我对其进行了修改。这是我的版本:

@if (@codesection==@batch) @then
@echo off

set "c=echo "
%c%abs:    Absolute Value
%c%atan:   Arctangent
%c%cos:    Cosine in Radians
%c%exp:    e Raised to the Power of
%c%floor:  Integer Part
%c%log:    Natural Logarithm
%c%random: Random Number from [0,1)
%c%sin:    Sine in Radians
%c%sqrt:   Square Root
%c%tan:    Tangent in Radians
echo.
:a
set "a="
set /p a=
if not defined a goto :EOF
for /f %%G in ('cscript //nologo //e:jscript "%~f0" "%a%"') do set b=%%G
%c%%a%=%b%
goto a

@end

WScript.Echo(eval("Math."+WScript.Arguments(0)));

输出示例:

C:\> test
abs:    Absolute Value
atan:   Arctangent
cos:    Cosine in Radians
exp:    e Raised to the Power of
floor:  Integer Part
log:    Natural Logarithm
random: Random Number from [0,1)
sin:    Sine in Radians
sqrt:   Square Root
tan:    Tangent in Radians

abs(3-5)
abs(3-5)=2
cos(Math.PI/3)
cos(Math.PI/3)=0.5
exp(1)
exp(1)=2.71828182845905
log(10)
log(10)=2.30258509299405
random()
random()=0.137126887153577
random()
random()=0.174421542333208
sin(Math.PI/2)
sin(Math.PI/2)=1
sin(Math.PI/3)
sin(Math.PI/3)=0.866025403784439
sin(Math.PI/4)
sin(Math.PI/4)=0.707106781186547
sqrt(2)
sqrt(2)=1.4142135623731
tan(Math.PI/4)
tan(Math.PI/4)=1

答案 1 :(得分:0)

如果没有明确指出你想要获得什么,这可能是一种近似。

@if (@codesection==@batch) @then
@echo off
set "c=echo "

:a
%c%abs: Absolute Value
%c%atn: Arctangent
%c%cos: Cosine in Degrees
%c%exp: e Raised to the Power of
%c%hex: Hexadecimal Value
%c%int: Integer Part
%c%log: Natural Logarithm
%c%oct: Octal Value
%c%rnd: Random Number from (0,1)
%c%sgn: Sign
%c%sin: Sine in Degrees
%c%sqr: Square Root
%c%tan: Tangent in Degrees
echo.
set "a="
set /p "a=?"
if not defined a goto b
cls
for /f %%G in ('cscript //nologo //e:jscript "%~f0" "%a%"') do set "b=%%G"
%c%%a%=%b%
echo.
goto a

:b
pause
exit /b
@end
WScript.Echo( WScript.Arguments(0) );
  • 代码稍作重组。
  • 已删除对'Eval'的调用(我不知道你想要什么),而在JS中,它是eval(JS区分大小写)。
  • 括号已添加到WScript.Echo(在JS中所有函数调用包括括号)。
  • exit /b已添加到批处理部分的末尾,以避免执行到达JS部分