CMD批处理文件缺少操作员错误

时间:2016-01-04 09:51:58

标签: batch-file

在DOS批处理文件中执行以下操作时,在第3行获取“缺少运算符”错误 - 因此第二个变量最终为零 - 为什么会这样?

SET VAR1=0.3
ECHO %VAR1%
SET /A VAR2=2*%VAR1%
ECHO %VAR2%

4 个答案:

答案 0 :(得分:2)

那是因为set /a只能处理整数。它是点,它会破坏你的语法。

作为解决方法,您可以使用(使用“大”数字):

SET VAR1=3/10
ECHO %VAR1%
SET /A VAR2=200*%VAR1%
ECHO %VAR2%

set /a VAR2=200*3/10

注意:由于set /a仅按整数计算,2*0.3 = 2*3/10 = 0.6仅为您提供0(不进行舍入,只需切割)

答案 1 :(得分:1)

如果您想在BAT中使用浮点数,可以使用混合脚本BAT / VBS,BAT / JS或BAT / PS。

这是一个带有BAT / VBS代码的示例:

@echo off   

::Creating the Math VBS file

 if not exist "Math.vbs" echo Wscript.echo replace(eval(WScript.Arguments(0)),",",".")>Math.vbs


SET VAR1=0.3

::Calling the Math VBS
call:Math 2 * %var1%
echo Result : %Result%

::Calling the Math VBS
Call:Math Cos(2000*%Result%)
echo Result : %Result%


exit/b

:Math
echo Working : "%*"
for /f %%a in ('cscript /nologo Math.vbs "%*"') do set "Result=%%a"

输出

  

工作:“2 * 0.3”

     

结果:0.6

     

工作:“Cos(2000 * 0.6)”

     

结果:0.996095822518803

如您所见,您也可以使用VBS的标准数学函数(Cos,Sin,Hex,Rnd,Int,Fix,Log,Oct,SGn,Sqr,Abs)。

答案 2 :(得分:1)

将非整数数乘以10的幂,比如100,并用整数计算。如果你最终在var x中说314,你最终会这样做:

echo %x:~0,-2%.%x:~-2%

你得到3.14

答案 3 :(得分:1)

@SachaDee提供的智能解决方案的替代方案是使用PowerShell,它允许通过命令行传递代码。

PowerShell的其他数学函数的语法有点冗长,但它确实具有不需要创建临时文件的优点。在不利方面,调用VBScript可能至少要慢一些。

@SETLOCAL
@ECHO OFF

CALL :EVAL RESULT1 "1.5 * 3.1415926"
@ECHO Result: %RESULT1%

CALL :EVAL COS_60deg "[Math]::Cos(3.1415926/3)"
@ECHO Result: %COS_60deg%

CALL :EVAL RESULT1 "[Math]::Pow(.25,3)"
@ECHO Result: %RESULT1%

EXIT /B

:EVAL
FOR /F %%r IN ('PowerShell -NoProfile -Command "%~2" ^<NUL') DO (SET "%~1=%%~r")
EXIT /B

最好的实际解决方案可能是在CMD / batch(我的偏好)中根本不执行此操作,或者以10的幂(也是解决方案)缩放十进制值,以便您始终执行整数运算,然后&#34;规模&#34;它回来了(使用子串操作)。