批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文件操作] 批处理如何根据文本内容计算总时间?

本帖最后由 娜美 于 2022-1-16 08:42 编辑

文本记录着不同企业的名称及执行时间   文本中倒数第一个 "企业"字段 肯定会记录着企业的名称, 根据倒数第一个企业的名称( 但是倒数第一个企业的名称不是固定的,文本是由系统自动记录会发生不同变化, 有可能是美尔达, 也有可能是腾尔或其它未知名称, 核心是以文本中倒数第一个 "企业"字段来确定未知企业名称 )  需要计出 该企业名称 的所有执行的时间总数,  谢谢



Thanks

回复 1# 娜美


    只计算美尔达,不管腾尔或其它企业是吗?
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,也不用找我要支付宝或微信账号。如果一定要给,请在群里给大家吧。

TOP

本帖最后由 娜美 于 2022-1-12 11:21 编辑
回复  娜美


    只计算美尔达,不管腾尔或其它企业是吗?
Batcher 发表于 2022-1-12 10:55



   No,按倒数最后一个企业名称   但是最后一个企业名称不是固定的,  有可能是美尔达,也有可能是腾尔或其它未知企业

TOP

本帖最后由 娜美 于 2022-1-12 11:26 编辑

Batcher哥    能不能按倒数第一行 "企业" 字段来做 假定义出企业名称  然后按假定义的企业名称来进行时间统计 就能得到真实的倒数第一行企业名称总时间?
用倒数第一行 "企业" 的字段 来确定企业名称  这只是我初步想法

TOP

本帖最后由 娜美 于 2022-1-12 11:56 编辑

可以入手对象字段似乎主要是下面这2行字段
企业
执行时间
是否可以先找出倒数第一个"企业"字段的名称是什么?  然后根据找出的倒数第一个"企业"的名称来进行时间总计?
只能想到这里了,   我脑子不好使...

TOP

回复 4# 娜美


    请找几个样本文件上传到阿里云盘或百度网盘,以便他人理解需求、测试代码。
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,也不用找我要支付宝或微信账号。如果一定要给,请在群里给大家吧。

TOP

本帖最后由 娜美 于 2022-1-14 11:24 编辑

回复 6# Batcher


   Batcher哥   好的  文本就是上面内容   系统就是以这样格式自动记录 都是一样的 只是加上了几个不同企业名称,  不同企业名称可能有几百个, 就略了
测试示例文本格式

https://wwe.lanzoul.com/if83yyr9pte

TOP

回复 7# 娜美
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set "FileInput=test.txt"
  5. set "FileOutput=out.txt"
  6. for /f "tokens=3" %%i in ('findstr /i /b "企业" "%FileInput%"') do (
  7.     set "LastCompany=%%i"
  8. )
  9. set "ThisCompany=0"
  10. set "SumHour=0"
  11. set "SumMinute=0"
  12. set "SumSecond=0"
  13. for /f "tokens=1-3" %%i in ('type "%FileInput%"') do (
  14.     if "%%i" equ "执行时间" (
  15.         if !ThisCompany! equ 1 (
  16.             for /f "tokens=1-3 delims=:hms" %%a in ("%%k") do (
  17.                 if "x%%c" neq "x" (
  18.                     set /a SumHour+=%%a
  19.                     set /a SumMinute+=%%b
  20.                     set /a SumSecond+=%%c
  21.                 ) else if "x%%b" neq "x" (
  22.                     set /a SumMinute+=%%a
  23.                     set /a SumSecond+=%%b
  24.                 ) else (
  25.                     set /a SumSecond+=%%a
  26.                 )
  27.             )
  28.         )
  29.     ) else if "%%k" equ "%LastCompany%" (
  30.         set "ThisCompany=1"
  31.     ) else (
  32.         set "ThisCompany=0"
  33.     )
  34. )
  35. set /a AddMinute=SumSecond/60
  36. set /a AddHour=(SumMinute+AddMinute)/60
  37. set /a FinalHour=SumHour+AddHour
  38. set /a FinalMinute=(SumMinute+AddMinute)%%60
  39. set /a FinalSecond=SumSecond%%60
  40. >"%FileOutput%" echo %LastCompany% ^> !FinalHour!h:!FinalMinute!m:!FinalSecond!s
复制代码
1

评分人数

【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,也不用找我要支付宝或微信账号。如果一定要给,请在群里给大家吧。

TOP

回复 7# 娜美


    文本的编码格式、文本里面的空格或制表符或其它空白字符等很多因素会影响到代码的编写,所以最好能在最开始发帖求助的时候就把测试文本上传到网盘。
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,也不用找我要支付宝或微信账号。如果一定要给,请在群里给大家吧。

TOP

回复 8# Batcher


   多谢Batcher哥   还是Batcher哥最帅

TOP

回复 11# 娜美


    现在你知道6楼的作用了吧
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,也不用找我要支付宝或微信账号。如果一定要给,请在群里给大家吧。

TOP

本帖最后由 娜美 于 2022-1-14 11:26 编辑

Batcher哥  有计算效率可以更快点的没,  计算一个30mb的文件内容似乎需要很久很久
https://wwe.lanzoul.com/if83yyr9pte

TOP

这种按日期计算很方便,把每个结果叠加到日期上,最后再减去最初定的日期。
QQ: 458609586
脚本默认优先 [PowerShell]

TOP

这种按日期计算很方便,把每个结果叠加到日期上,最后再减去最初定的日期。
xczxczxcz 发表于 2022-1-14 19:11



      Batcher哥的得到结果是正确的,但是效率慢慢   可能需要用到awk 或Powershlle  哥哥你有更快的吗

TOP

本帖最后由 idwma 于 2022-1-14 22:43 编辑
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. $in='test.txt'
  3. $out='out.txt'
  4. $a="$((gc $in -readcount 0) -match '企业|执行时间')" -split '.(?=企业)'
  5. $b=($a[-1]  -split '\s+')[2]
  6. foreach($i in $($a -match $b -match '执行时间' -replace '.*>\s+|[hms]' -replace '^([^:]*?):([^:]*?)$','0:$1:$2')){$c+=[timespan]$i}
  7. sc $out ("$b > {0}h:{1:mm\m:ss\s}" -f ($c.days*24+$c.Hours),[datetime]$c.ticks)
复制代码
1

评分人数

TOP

返回列表