#batch-file
#пакетный файл
Вопрос:
я пытаюсь добавить два числа, полученные из файла.
Но он показывает только последнее значение sum. Спасибо за помощь!
@FOR /F "eol=; tokens=1-3 delims=, " %%i IN (test.txt) DO (
set m=%%j
set n=%%k
set /a sum=%m% %n%
echo sum = %sum%
)
и в test.txt у меня есть
alex 4 5
john 6 7
и я хочу увидеть
sum=9
sum=13
он показывает только
sum=13
sum=13
Комментарии:
1. Вы не обратили внимания на одну крошечную деталь: при первом запуске он будет отображаться только
sum =
. Это не совсем то последнее значение, которое показывает ваш цикл, а то, которое было до цикла.
Ответ №1:
Проблема заключается в увеличении процента в строке set /a sum=%m% %n%
и echo sum = %sum%
.
Они расширяются перед выполнением цикла FOR.
Таким образом, вы получили результат «глобального» набора суммы.
Лучше использовать отложенное расширение, так как тогда все переменные, заключенные в !
, расширяются во время выполнения, а не во время синтаксического анализа
@echo off
setlocal EnableDelayedExpansion
FOR /F "eol=; tokens=1-3 delims=, " %%i IN (test.txt) DO (
set m=%%j
set n=%%k
set /a sum=m n
echo sum = !sum!
)
Комментарии:
1. @Alex: Обратите также внимание, что ссылки на переменные
m
иn
не используются%
или!
вокруг их имен в строке, которая вычисляетsum
. Этот особый способ ссылки разрешен вSET /A
команде и имеет эффект отложенного расширения (т. Е. он работает так, как если бы вы ссылались на них следующим образом:set /a sum=!m! !n!
).