У меня есть n текстовых файлов в папке с форматом ниже
File1.txt
001@12345 Value1
002@12345 Value2
File2.txt
003@12345 Value3
004@12345 Value4
Мне нужно получить сумму чисел до символа @. Как мне получить это с помощью пакетного скрипта Windows?





введите файлы, найдите соответствующие строки, поместите for /f, чтобы получить первую часть перед @, и просуммируйте их:
@echo off
set sum=0
for /f "delims=@" %%a in ('type file*.txt ^|find "@"') do set /a sum+=1%%a-1000
echo %sum%
Примечание: есть некоторые ограничения: в текущей форме он работает только с трехзначными числами, и есть ограничение на сумму из-за чисел INT32. (макс. 2147483647, но уменьшено с помощью уловки, позволяющей преодолеть числа, рассматриваемые как восьмеричные, при запуске с 0)
К сожалению, это будет работать только с числами до 7 из-за ведущих нулей, которые позволяют set /A интерпретировать их как восьмеричные; также type выводит имена файлов в STDERR при использовании подстановочных знаков ...
@aschipfl ах, да, я это не заметил. - отредактировал.
Чтобы иметь дело с ведущими нулями, вы также можете поместить еще один цикл for /F внутри вашего: for /F "delims=@" %%a in ('2^> nul type "file*.txt" ^| find "@"') do for /F "delims=0" %%b in (""%a") do set /A "SUM+=%%b"
@aschipfl, тебе не нужен TOKENS=* delims=0, чтобы убрать начальные нули?
О да, @Squashman, конечно, извините за то, что пропустил это ...
Отлично. А какой у вас конкретный вопрос? Пожалуйста, узнайте Как спросить здесь! Помните, что StackOverflow - это не бесплатный сервис для написания кода / сценария! Так что вы должны попробовать это самостоятельно и вернуться сюда, когда вы застряли, предоставив минимальный воспроизводимый пример! Также вам нужно уточнить, хотите ли вы сумму для каждого файла или для всех файлов ...