batch-file - 批量变量 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 是错误的,我只是还没有尝试修复它,直到我可以得到“更容易” “那些工作的人)。
解决方案
也许这可以帮助你。它仅适用于整数度数:
@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%
推荐阅读
- python - 如何让 OpenCV 在 Raspberry Pi 4 (Raspbian Buster) 上完全运行?
- sql - 使用 Oracle SQL 在最接近的值中查找中位数
- android - 使用 Fragment 从我的应用程序发送消息
- swift - 使用 vapor 导入多个私有存储库时出错
- java - Spring Boot批处理:如何使用作业参数运行作业
- python - 使用 sudo python3 但不使用 python3 时导入 aws 凭据时出错
- swiftui - Xcode 11 beta 3 在同时使用 NavigationLink、@EnvironmentObject 和 List 时崩溃
- crystal-reports - 为什么水晶报告在我编写代码时提示我输入参数字段值
- random - 是否可以预测计算机会随机选择什么数字?
- java - NoSuchBeanDefinitionException 与多个 JdbcTemplate 和 Spring Boot