【发布时间】:2020-08-04 17:05:30
【问题描述】:
我有下面的批处理代码,它将一个值作为输入,确定它是否在特定范围内,然后应该设置一个新变量并输出它。但是,它没有按预期工作。一、代码:
set /p wndBr=<C:\summaries\daily_values_wind_bearing.txt
if %wndBr% GEQ 56.25 if %wndBr% LSS 78.75 set wndDir="ENE"
if %wndBr% GEQ 78.75 if %wndBr% LSS 101.25 set wndDir="E"
if %wndBr% GEQ 101.25 if %wndBr% LSS 123.75 set wndDir="ESE"
echo %wndBr%
echo %wndDir%
当我运行它时,我得到:
C:\summaries>set /p wndBr= 0<C:\summaries\daily_values_wind_bearing.txt
C:\summaries>if 89.68 GEQ 56.25 if 89.68 LSS 78.75 set wndDir="ENE"
C:\summaries>if 89.68 GEQ 78.75 if 89.68 LSS 101.25 set wndDir="E"
C:\summaries>if 89.68 GEQ 101.25 if 89.68 LSS 123.75 set wndDir="ESE"
C:\summaries>echo 89.68
89.68
C:\summaries>echo
ECHO is on.
如图所示,输入变量wndBr恰好是89.68,所以应该使用中间的if语句。我已经测试过,似乎 if 逻辑不正确。问题似乎是设置wndDir 变量。我已经尝试在语句周围加上括号,在值周围加上引号,没有引号,在变量周围加上 %%,使用 set /p 等。显然我遗漏了一些东西,但不确定还有什么要测试的。
作为参考,这段代码应该取平均风向(从 0 到 360 度),然后将其转换为方向,即上面的示例。为了获得更多“乐趣”,我还没有弄清楚如何确定如何获得“北”(if "%wndBr%" GEQ 0.00 if LSS 11.25 OR GEQ 348.75 if LSS 0.00 goto set wndDir="N"
【问题讨论】:
-
cmd不支持浮点数。所以if 89.68 LSS 101.25是STRING 比较,这使得89.68 actually "bigger" than101.25. I'd like to see the exact output ofecho "%wndBr%" 在set /p命令之后也是。 -
文件中的数字在点后是否总是有两位数?然后只需删除点即可转换为整数 (
set "wndBr=%wndBr:.=%"),这足以纠正您的逻辑。 -
嘿@Stephan,它准确地输出 89.68。对于您和@Mofi,来自 txt 文件(在本例中为 89.68)的输入不必那么精确。白天每分钟写入数据库的值只是一个整数,0-359。所以,我可以将mysql从
select format(avg(Windbearing),2) frommonthly_new` where LogDateTime between current_date - 间隔1天和current_date;`调整为..format(avg(Windbearing),0).. -
另外,很抱歉上面的评论。它删除了一些代码示例标记..
-
@sbagnato:您写道:“一天中每分钟写入数据库的值只是一个整数,0-359”。那么,为什么要将它写入带有两位十进制数字的文本文件?只是为了让事情复杂化?
:(
标签: batch-file