Пакетная переменная GEQ x, и если LSS y, то вывод z - PullRequest
0 голосов
/ 04 августа 2020

У меня есть пакетный код ниже, который принимает значение в качестве входных, определяет, находится ли оно в заданном c диапазоне, а затем должен установить новую переменную и вывести ее. Однако это не работает должным образом. Во-первых, код:

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 logi c неверен. Проблема, похоже, заключается в установке переменной wndDir. Я пробовал круглые скобки вокруг оператора, кавычки вокруг значения, без кавычек, %% вокруг переменной, используя set /p и т. Д. Ясно, что мне чего-то не хватает, но я не знаю, что еще проверить.

Для справки, этот код должен принимать средний пеленг ветра (от 0 до 360 градусов), а затем преобразовывать его в направление, IE пример выше. Для большего "веселья" мне еще предстоит выяснить, как определить, как получить "Север" (if "%wndBr%" GEQ 0.00 if LSS 11.25 OR GEQ 348.75 if LSS 0.00 goto set wndDir="N" <- я знаю, что использование ИЛИ неверно, я просто еще не пытался исправить это, пока не смогу получить "более простые" работают). </p>

1 Ответ

1 голос
/ 04 августа 2020

Возможно, это может вам помочь. Он работает только с целыми градусами:

@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"

EDIT : Добавлен пример вывода

Enter wind bearing: 40
40 = NE

EDIT : Код изменен

@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%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...