所以只尝试一个基本的批量数学脚本,但总是告诉我缺少操作数可以有人告诉我为什么以及如何解决它?我在这里寻找类似的问题,并尝试匹配语法,但得到了同样的错误。这是脚本:
@echo OFF
set /p Choice=(a) Amps to Horse Power, (h) Horse Power to Amps:
set /p VOLTAGE=ENTER VOLTAGE:
if %Choice%==a (
set /p AMPS=ENTER AMPS:
set /a WATT=%VOLTAGE%*%AMPS%
echo power is:%WATT%
REM set /a HP=%WATT% / 746
REM echo %HP%
)
if %Choice%==h (
set /p HP=ENTER HORSEPOWER:
set /a AMPS=(( %HP% * 746 ) / %VOLTAGE% )
echo %AMPS%
)
答案 0 :(得分:0)
您的代码中存在以下几个问题:
set /a AMPS=(( %HP% * 746 ) / %VOLTAGE% )
中的公式包含括号,它们对命令解释器cmd
具有特殊含义:第一个)
被视为if %Choice%==h (
的右括号命令。要解决此问题,请将整个算术表达式放在引号之间,如set /a "AMPS=(( %HP% * 746 ) / %VOLTAGE% )"
,或者像set /a AMPS=^(^( %HP% * 746 ^) / %VOLTAGE% ^)
这样的插入符转义括号。set /a
命令行中的封闭百分号时,您可以更简单地使用它,例如set /a WATT=VOLTAGE*AMPS
。 set /a
命令在没有%%
的情况下自行检测变量名称,这具有很大的额外优势,即接收到的值是执行set /a
命令时出现的值而不是在代码块开始之前可用的那个。唯一剩下的是echo
命令,你不能省略%%
标志;但你可以使用像call
这样的call echo %%AMPS%%
- 技巧,在执行此命令行时强制执行另一个解析阶段,从而导致该时间点可用的变量值(类似于set /a
的行为以及延迟扩张。)if
查询将失败,因此请将两个比较表达式放在引号之间以避免:if /i "%Choice%"=="a"
;我还要添加开关/i
,以使比较不区分大小写。set /p
的显示消息应放在引号之间,以避免特殊字符(如(
,)
)出现问题:set /p Choice="(a) Amps to Horse Power, (h) Horse Power to Amps:"
。 以下是我可能会使用的代码,转换Amps to Horse Power
已完成,并且为分区实现了舍入(到最接近的整数)(因为set /A
仅支持带符号的32位整数算术,所以任何潜在的部分部分都被驳回了):
@echo off
set /A "FACTOR=746"
set /A "ROUND=1" & rem set to `1` for rounding and to `0` otherwise;
set /P SEL="(a) Amps to Horse Power, (h) Horse Power to Amps: "
set /P VOLTS="Enter Voltage: "
if /I "%SEL%"=="a" (
set /P AMPS="ENTER AMPS: "
set /A "HP=(2*AMPS*VOLTS+ROUND*FACTOR)/(2*FACTOR)"
call echo Horse Power is: %%HP%%
)
if /I "%SEL%"=="h" (
set /P HP="Enter Horse Power: "
set /A "AMPS=(2*HP*FACTOR+ROUND*VOLTS)/(2*VOLTS)"
call echo Amps is: %%AMPS%%
)