Batch file 使用.bat命令对.txt文件的值求和

Batch file 使用.bat命令对.txt文件的值求和,batch-file,Batch File,我有以下脚本: set "$file=futuroscielotan.txt" set "$search=Previsto" set $repl[2]=TOTAL set $repl[3]=Visa set $repl[4]=Mastercard set $repl[5]=Amex set $repl[6]=Sorocred set $repl[7]=Elo set $repl[8]=Diners set

我有以下脚本:

set "$file=futuroscielotan.txt"
set "$search=Previsto"

set $repl[2]=TOTAL       
set $repl[3]=Visa        
set $repl[4]=Mastercard  
set $repl[5]=Amex        
set $repl[6]=Sorocred    
set $repl[7]=Elo         
set $repl[8]=Diners      
set $repl[9]=Agiplan     
set $repl[10]=Banescard   
set $repl[11]=Cabal       
set $repl[12]=Credsystem  
set $repl[13]=Hipercard   
set $repl[14]=Credz       
set $repl[15]=Hiper       

setlocal enabledelayedexpansion
set $count=1

(for /f "delims=" %%a in (%$file%) do (
   call:replace "%%a" !$count!
   set/a $count+=1
   )
)> "Futuros Cielo Tan.txt"
echo. >> "Futuros Cielo Tan.txt"
echo ---  FUTUROS CIELO TAN --- >> "Futuros Cielo Tan.txt"

mkdir "C:\Users\lojas\Desktop\Extratos Banco" 
move "Futuros Cielo Tan.txt" "C:\Users\lojas\Desktop\Extratos Banco\Futuros Cielo Tan.txt"

exit/b

:replace
set "$line=%~1"
set $repl=!$repl[%2]!
set "$line=!$line:%$search%=%$repl%!"
echo !$line!
if "%2"=="1" echo.
if "%2"=="2" echo.
此脚本的输出
.txt
文件如下所示:

01/06/2018 à 20/03/2019

TOTAL       :  R$ 22.250,74  

Visa        :  R$ 1.086,51  
Mastercard  :  R$ 492,63  
Amex        :  R$ 0,00  
Sorocred    :  R$ 20.109,98  
Elo         :  R$ 0,00  
Diners      :  R$ 0,00  
Agiplan     :  R$ 0,00  
Banescard   :  R$ 0,00  
Cabal       :  R$ 0,00  
Credsystem  :  R$ 0,00  
Hipercard   :  R$ 0,00  
Credz       :  R$ 0,00  

---  FUTUROS CIELO TAN --- 
但是我需要一种方法来计算卡的值,并创建另一行,名为
TOTAL VALUE of cards CHECKED:xxxxxx

它必须如下所示:

01/06/2018 à 20/03/2019

TOTAL       :  R$ 22.250,74  

Visa        :  R$ 1.086,51  
Mastercard  :  R$ 492,63  
Amex        :  R$ 0,00  
Sorocred    :  R$ 20.109,98  
Elo         :  R$ 0,00  
Diners      :  R$ 0,00  
Agiplan     :  R$ 0,00  
Banescard   :  R$ 0,00  
Cabal       :  R$ 0,00  
Credsystem  :  R$ 0,00  
Hipercard   :  R$ 0,00  
Credz       :  R$ 0,00  

TOTAL CARD VALUES CHECKED: R$ 21.689,12

---  FUTUROS CIELO TAN --- 
我怎么做


只是试着做另一个命令只是为了测试。如下:

for /f "tokens=1 delims=R$ " %%a in (Futuros Cielo Tan.txt) do set /a total+=%%a
echo TOTAL CHECKED:  %total% >test.txt

但这不是求和。它总是放一个
0
,如下所示:
TOTAL CHECKED:0

Karen,给定输入文件
futuroscielotan.txt
,如前面删除的问题所述:

01/06/2018 à 20/03/2019
Previsto:  R$ 22.250,74  
Previsto:  R$ 1.086,51  
Previsto:  R$ 492,63  
Previsto:  R$ 0,00  
Previsto:  R$ 20.109,98  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
Previsto:  R$ 0,00  
您问题中的脚本可能如下所示(未经测试):

@Echo关闭
SetLocal EnableDelayedExpansion
设置“$file=futuroscielotan.txt”
设置“$search=Previsto”
设置“$outdir=C:\Users\lojas\Desktop\Extratos Banco”
设置“$outfile=Futuros Cielo Tan.txt”
设置“$repl[2]=总计”
设置“$repl[3]=Visa”
设置“$repl[4]=万事达卡”
设置“$repl[5]=美国运通”
设置“$repl[6]=Sorocred”
设置“$repl[7]=Elo”
设置“$repl[8]=就餐者”
设置“$repl[9]=Agiplan”
设置“$repl[10]=Banescard”
设置“$repl[11]=阴谋集团”
设置“$repl[12]=Credsystem”
设置“$repl[13]=Hipercard”
设置“$repl[14]=Credz”
设置“$repl[15]=Hiper”
如果不存在“%$outdir%\”(MD“%$outdir%”2>Nul | |退出/B)
Set/A$count=1,$real=cent=0
(
对于/F“UseBackQ Delims=“%%A In”(“%$file%”)Do(
呼叫:替换“%%A”!$count!”
设置/A$count+=1
)
如果不是“!$cent:~,-2!”==“设置/A$real=$real+!$cent:~,-2!”!
如果不是“!$real:~,-3!”==”设置“$real=!$real:~,-3!”!$real:~-3!”
如果不是“!$real:~,-7!”==”设置“$real=!$real:~,-7!”!$real:~-7!”
如果不是“!$real:~,-11!”==”设置“$real=!$real:~,-11!”!$real:~-11!”
设置“$cent=0!$cent!”
回音(
回显检查的卡总值:R$!$真实值!!$分:~-2!
回音(
Echo——FUTUROS CIELO TAN---
)>“%$outdir%\%%$outfile%”
暂停
退出/B
:替换
设置“$line=%~1”
如果%2 GEq 3调用:计算!$line:$=!
设置“$repl=!$repl[%~2]”
设置“$line=!$line:%%$search%=%%$repl%”
回声%$line%
中频2相等1回波(
中频2相等2回波(
退出/B
:计算
如果%1全球技术法规0(设置“$\u r=%1”
设置“$\u r=!$\u r:.=!”
设置/A$real+=$\r)
如果%2全球技术法规0(套/A$_c=10%2%%100
设置/A$cent+=$\U c)
退出/B
基于第一个代码,标签
:replace
未修改。 注释了用于测试的
mkdir
move

将其用作输入,确定
循环的
中的令牌设置:

01/06/2018 à 20/03/2019
TOTAL       :  R$ 22.250,74 
Visa        :  R$ 1.086,51  
Mastercard  :  R$ 492,63  
Amex        :  R$ 0,00  
Sorocred    :  R$ 20.109,98  
Elo         :  R$ 0,00  
Diners      :  R$ 0,00  
Agiplan     :  R$ 0,00  
Banescard   :  R$ 0,00  
Cabal       :  R$ 0,00  
Credsystem  :  R$ 0,00  
Hipercard   :  R$ 0,00  
Credz       :  R$ 0,00  
被调用的标签
:sum
删除前导零、逗号和 传递的每个货币字符串的小数点。它添加 使用
设置/a
将剩余整数转换为总变量

被调用的标签
:digits2currency
格式化整数
总计的值
以货币表示。如果仅为十进制, 它将通过更新格式化字符串提前完成, 否则,千分之一将被删除。
total
变量为 从整数字符串重用为货币字符串

还可以尝试以下输入:

01/06/2018 à 20/03/2019
TOTAL       :  R$ 0,00 
Visa        :  R$ 0,09  
Mastercard  :  R$ 0,00  
Amex        :  R$ 0,00  
Sorocred    :  R$ 0,00  
Elo         :  R$ 0,00  
Diners      :  R$ 0,00  
Agiplan     :  R$ 0,00  
Banescard   :  R$ 0,00  
Cabal       :  R$ 0,00  
Credsystem  :  R$ 0,00  
Hipercard   :  R$ 0,00  
Credz       :  R$ 0,00  

由于总数应为
0,09

您在之前询问时已收到一些建议,然后将其删除!您不应该创建新问题,您应该对删除的问题进行更改,包括给出的建议,然后将其取消删除。请双引号引用您的变量,以便变量nd值包含在这些双引号内,例如
设置“$repl[5]=Amex”
!(设置“$repl[5]=Amex”)。删除是因为我发现了问题所在,而我的另一个怀疑是不同的。因此,为了避免与有相同问题的人混淆,只需删除该问题,并创建了一个可靠的问题。好久不见你了……@Karen:你应该知道,拥有良好声誉的用户仍然可以看到你的问题-因此删除并不能解决你的问题这是我的评论(用点交换空格)很抱歉这么说,但我觉得编程批处理和你永远不会有朋友。用空格填充$repl[2..15]直到一个唯一的长度,并用双引号括起
集“$repl[2]=TOTAL…”
命令(IIRC一再告诉你)伙计们,让我来处理所有这些并重新制作我的脚本,然后我告诉你们。谢谢你们。请检查一下我的上一次编辑!只有一个问题…它仍然没有求和。当我运行时,检查的行
总卡值:R$0,00
总是它。它仍然没有求和卡的值。我得到的输出与您想要的输出完全匹配n您的问题。输入如名为
futuroscielotan.txt
的答案所示,该答案输出到
Futuros cielotan.txt
。总行为
检查的总卡值:R$21.689,12
。确保您在
循环中使用了类似的输入,否则
令牌和
if
可能需要更改。而不是与我测试的相同。尝试最后一个示例输入。代码需要处理货币的变化。工作正常。干净且功能完善…喜欢
calcs
中有趣的部分。谢谢!@Karen,我对centavos输出做了一个小的更改,请更新并重试;谢谢。最后一个疑问。我更改了行
Echo检查的总卡值:R$!$real!,!$cent:~-2!
回送购物车会议的总卡值:R$!$real!,!$cent:~-2!
,但字符
不被识别。我尝试了这种方法
^245
也加倍了
但没有办法。我是怎么做到的?
01/06/2018 à 20/03/2019
TOTAL       :  R$ 0,00 
Visa        :  R$ 0,09  
Mastercard  :  R$ 0,00  
Amex        :  R$ 0,00  
Sorocred    :  R$ 0,00  
Elo         :  R$ 0,00  
Diners      :  R$ 0,00  
Agiplan     :  R$ 0,00  
Banescard   :  R$ 0,00  
Cabal       :  R$ 0,00  
Credsystem  :  R$ 0,00  
Hipercard   :  R$ 0,00  
Credz       :  R$ 0,00