首页 > 解决方案 > 批量变量 GEQ x 如果 LSS y 则输出 z

问题描述

我有下面的批处理代码,它将一个值作为输入,确定它是否在特定范围内,然后应该设置一个新变量并输出它。但是,它没有按预期工作。首先,代码:

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" <--我知道使用 OR 是错误的,我只是还没有尝试修复它,直到我可以得到“更容易” “那些工作的人)。

标签: batch-file

解决方案


也许这可以帮助你。它仅适用于整数度数:

@echo off
setlocal

:loop
set "wndBr="
set /P "wndBr=Enter wind bearing: "
if not defined wndBr goto :EOF

for %%a in (0:N  11:NNE  34:NE  56:ENE  79:E
                101:ESE 124:SE 146:SSE 169:S
                191:SSW 214:SW 236:WSW 259:W
                281:WNW 304:NW 326:NNW 349:N ) do (
   for /F "tokens=1,2 delims=:" %%b in ("%%a") do if %wndBr% geq %%b set "wndDir=%%c"
)

echo %wndBr% = %wndDir%

goto loop

但是,如果输入值有两位小数,只需通过以下方式将其转换为整数for /F "delims=." %%a in ("%wndBr%) do set "wndBr=%%a"

编辑添加了输出示例

Enter wind bearing: 40
40 = NE

编辑代码修改

@echo off
setlocal

set /p wndBr=<C:\summaries\daily_values_wind_bearing.txt

for %%a in (0:N  11:NNE  34:NE  56:ENE  79:E
                101:ESE 124:SE 146:SSE 169:S
                191:SSW 214:SW 236:WSW 259:W
                281:WNW 304:NW 326:NNW 349:N ) do (
   for /F "tokens=1,2 delims=:" %%b in ("%%a") do if %wndBr% geq %%b set "wndDir=%%c"
)

echo %wndBr% = %wndDir%

推荐阅读