找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21522|回复: 7

[文本处理] 请问批处理怎么将txt里hh:mm:ss.000的时长格式转化毫秒?

[复制链接]
发表于 2022-4-28 14:07:11 | 显示全部楼层 |阅读模式
我的一个txt文件里存储着很多的时长数据,时长是按“小时:分钟:秒.毫秒”的格式存储的。如下所示:
00:01:04.567        00:01:04.933        00:00:00.367        寒
00:01:04.933        00:01:05.300        00:00:00.367        空
……
怎样用批处理把这个txt里所有的时长数据直接转化为多少多少毫秒,替换原始的格式呢?即把原始的txt转变成下面这样:
64567        64933        367        寒
64933        65300        367        空
……
谢谢。
发表于 2022-4-28 16:26:05 | 显示全部楼层
本帖最后由 for_flr 于 2022-4-28 17:06 编辑

  1. #&cls&powershell "iex(gc '%~0'|out-string)"&pause
  2. $txt=foreach($line in gc a.txt){
  3.     $newline=@()
  4.     $line.split("",[StringSplitOptions]::RemoveEmptyEntries)|%{
  5.         if($_ -match '\d'){$newline+=([timespan]$_).totalmilliseconds}else{$newline+=$_}
  6.     }
  7.     $newline -join "`t"
  8. }
  9. sc new_a.txt $txt
复制代码
调用powershell来转换

评分

参与人数 1技术 +1 收起 理由
vicodin + 1 感谢分享

查看全部评分

发表于 2022-4-28 18:49:54 | 显示全部楼层
本帖最后由 yakeyun 于 2022-4-28 20:54 编辑

回复 1# vicodin

来个纯P,效率比较慢,有兴趣的可以修改下,提下速:
  1. @echo off&setlocal enabledelayedexpansion
  2. cd /d "%~dp0"
  3. (
  4. REM=========================================================
  5. for /f "tokens=1-3,*" %%a in (a.txt) do (
  6. for /f "tokens=1-2,* delims=:" %%e in ('echo %%a') do (
  7. for /f "tokens=1,* delims=." %%g in ('echo %%g') do (
  8. set AD=%%d
  9. set Ha=%%h
  10. set /a Ea=%%e * 60 * 60 * 1000
  11. set /a Fa=%%f * 60 * 1000
  12. set /a Ga=%%g * 1000
  13. set /a AA=!Ea!+!Fa!+!Ga!+!Ha!
  14. )
  15. )
  16. REM=========================================================
  17. for /f "tokens=1-2,* delims=:" %%e in ('echo %%b') do (
  18. for /f "tokens=1,* delims=." %%g in ('echo %%g') do (
  19. set Hb=%%h
  20. set /a Eb=%%e * 60 * 60 * 1000
  21. set /a Fb=%%f * 60 * 1000
  22. set /a Gb=%%g * 1000
  23. set /a AB=!Eb!+!Fb!+!Gb!+!Hb!
  24. )
  25. )
  26. REM=========================================================
  27. for /f "tokens=1-2,* delims=:" %%e in ('echo %%c') do (
  28. for /f "tokens=1,* delims=." %%g in ('echo %%g') do (
  29. set Hc=%%h
  30. set /a Ec=%%e * 60 * 60 * 1000
  31. set /a Fc=%%f * 60 * 1000
  32. set /a Gc=%%g * 1000
  33. set /a AC=!Ec!+!Fc!+!Gc!+!Hc!
  34. )
  35. )
  36. echo,!AA!        !AB!        !AC!        !AD!
  37. )
  38. )  >new_a.txt
  39. echo.
  40. echo,数据处理完毕!!!
  41. echo.
  42. pause>nul
复制代码

评分

参与人数 1技术 +1 收起 理由
vicodin + 1 感谢分享

查看全部评分

发表于 2022-4-28 20:29:04 | 显示全部楼层
看来 偶们对纯P的理解有误!


回复  vicodin

来个纯P,效率比较慢,有兴趣的可以修改下,提下速:
yakeyun 发表于 2022-4-28 18:49
发表于 2022-4-28 20:30:18 | 显示全部楼层

  1. [regex]::Replace((gc '.\a.txt' -raw), '(\d+:){2}\d+(\.\d+)?',{[TimeSpan]::Parse($args.value).TotalMilliSeconds})|sc '.\a.txt' -force
复制代码

评分

参与人数 1技术 +1 收起 理由
vicodin + 1 感谢分享

查看全部评分

发表于 2022-4-28 20:52:01 | 显示全部楼层
回复 4# xczxczxcz

由于不存在余数计算,已经把shell计算命令改了,速度要快很多。
 楼主| 发表于 2022-4-28 21:07:01 | 显示全部楼层
感谢几位大神
厉害厉害
学习了
发表于 2022-4-30 19:55:27 | 显示全部楼层
回复 3# yakeyun


这样简洁一点:
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "tokens=1-4" %%h in ('type "1.txt"') do (
  4.     call :Time2MI %%h
  5.     call :Time2MI %%i
  6.     call :Time2MI %%j
  7.     echo,%%k
  8. ))>"2.txt"
  9. goto :eof

  10. :Time2MI
  11. for /f "tokens=1-4 delims=:." %%a in ("%1") do (
  12.     set /a HH=1%%a-100
  13.     set /a MM=1%%b-100
  14.     set /a SS=1%%c-100
  15.     set /a MI=1%%d-1000
  16. )
  17. set /a HH2MM=HH*60
  18. set /a MM+=HH2MM
  19. set /a MM2SS=MM*60
  20. set /a SS+=MM2SS
  21. set /a SS2MI=SS*1000
  22. set /a MI+=SS2MI
  23. set /p "=%MI% "<nul
  24. goto :eof
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 03:12 , Processed in 0.019478 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表