добавление нескольких чисел в пакетном режиме

#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! ).