Windows 我在批处理脚本中有3个不同文件的行数,我想添加这些数字并将其打印到输出文件中

Windows 我在批处理脚本中有3个不同文件的行数,我想添加这些数字并将其打印到输出文件中,windows,batch-file,Windows,Batch File,我使用下面的批处理脚本生成一个文本文件,显示三个不同的.bch文件中的行数。(这使我可以计算每个.bch进程中处理了多少条记录) 它正在工作,但我想在输出文件中添加一行,将三个值相加,这样我就可以对所有三个文件进行一次累积计数 @ECHO OFF type NUL > output_%date:~10%%date:~4,2%%date:~7,2%.txt cd c:\batch for %%G in (C:\batch\*.bch) do find /c /v "_+_" %%G &

我使用下面的批处理脚本生成一个文本文件,显示三个不同的.bch文件中的行数。(这使我可以计算每个.bch进程中处理了多少条记录)

它正在工作,但我想在输出文件中添加一行,将三个值相加,这样我就可以对所有三个文件进行一次累积计数

@ECHO OFF

type NUL > output_%date:~10%%date:~4,2%%date:~7,2%.txt

cd c:\batch

for %%G in (C:\batch\*.bch) do find /c /v "_+_" %%G >>ipconfig >> c:\batch\output_%date:~10%%date:~4,2%%date:~7,2%.txt 


EXIT

您可以在每次迭代中捕获一个变量中的计数,并在进行时将它们全部相加:

set Count=0
for %%G in (C:\batch\*.bch) do (
  for %%C in ('find /c /v "" "%%G"') do (
    set /a Count+=%%C
    >> output.txt echo %%C
  )
)
>> output.txt echo %Count%
一些旁注:

  • 不要在批处理文件中使用
    exit
    ,除非您的目标是实际退出命令解释器(这种情况很少发生)。通常,您希望退出批处理文件,这可以通过
    exit/b
    goto:eof
    完成

  • 对时间戳使用不变日期格式,而不是切片
    %date%
    伪变量。这可以通过

    for /f %%a in ('wmic path win32_utctime get /format:list') do 2>nul set /a "%%a"
    rem Leading zeroes
    if %Month% LSS 10 set Month=0%Month%
    if %Day% LSS 10 set Day=0%Day%
    if %Hour% LSS 10 set Hour=0%Hour%
    if %Minute% LSS 10 set Minute=0%Minute%
    if %Second% LSS 10 set Second=0%Second%
    echo C:\batch\output_%Year%-%Day%-%Month%.txt
    
  • 对changind目录使用
    pushd
    popd
    ,因为这样更容易撤消。在任何情况下,如果当前目录不在
    C:
    上,您的
    cd C:\batch
    将失败;它需要
    /D
    开关才能正常工作


  • set Count+=%%C
    -->我可能错了,但这不起作用,因为在调用
    set
    时,您没有使用
    /A
    开关,您使用的是未展开的
    Count
    值,您应该启用延迟展开并使用
    !伯爵相反,不是吗?我还没有试过你的代码,我可能错了,你是对的。缺少
    /a
    。没有它,
    +=
    没有任何意义,因为它会尝试设置变量的值
    Count+
    。而
    set/a
    不受非延迟变量扩展的影响,因为它不必使用
    %Variables%
    。所以这里不需要使用延迟扩展(这只是我必须再次解释的另一个概念)。