Проблема в том, что вы используете %m%
внутри цикла for
. Это оценивается, когда цикл читается (перед любыми итерациями вообще). Другими словами, весь цикл, вплоть до закрывающей круглой скобки, читается и оценивается перед выполнением. Таким образом, %m%
всегда будет его начальным значением, независимо от того, что вы фактически установили в цикле.
Пример должен, как мы надеемся, проиллюстрировать это:
set val=7
for %%i in (1) do (
set val=99
echo %val%
)
echo %val%
, что приводит к неожиданному (для некоторых):
7
99
просто потому, что %val%
в первом операторе echo интерпретируется (т. Е. Интерпретируется весь цикл for
) перед выполнением любого из них.
Вам нужно отложенное расширение вместе с чем-то, что заставит значение m
быть установленным на первый %%x
независимо от этого. Использование команды setlocal
и !m!
вместо %m%
задержит оценку m
до тех пор, пока строка не будет выполнена.
Кроме того, если изначально установить значение m
равным нулю и установить значение %%x
, когда оно равно , то ничто не обеспечит загрузку первого значения %%x
в m
.
.
@echo off
setlocal enableextensions enabledelayedexpansion
set m=
for /f "tokens=1,2 delims=," %%x in (my.csv) do (
if "!m!" == "" set m=%%x
if !m! lss %%x set m=%%x
)
echo Max X Value = !m!
endlocal
Использование приведенного выше кода с этим my.csv
файлом:
1,a
2,b
10,c
3,d
приводит к выводу:
Max X Value = 10
как ожидалось или, для ваших примеров данных в другом комментарии:
422,34
464,55
455,65
421,88
вы получите:
Max X Value = 464