Board logo

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

作者: vicodin    时间: 2022-4-28 14:07     标题: 请问批处理怎么将txt里hh:mm:ss.000的时长格式转化毫秒?

我的一个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        空
……
谢谢。
作者: for_flr    时间: 2022-4-28 16:26

本帖最后由 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来转换
作者: yakeyun    时间: 2022-4-28 18:49

本帖最后由 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
复制代码

作者: xczxczxcz    时间: 2022-4-28 20:29

看来 偶们对纯P的理解有误!


回复  vicodin

来个纯P,效率比较慢,有兴趣的可以修改下,提下速:
yakeyun 发表于 2022-4-28 18:49

作者: xczxczxcz    时间: 2022-4-28 20:30

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

作者: yakeyun    时间: 2022-4-28 20:52

回复 4# xczxczxcz

由于不存在余数计算,已经把shell计算命令改了,速度要快很多。
作者: vicodin    时间: 2022-4-28 21:07

感谢几位大神
厉害厉害
学习了
作者: Batcher    时间: 2022-4-30 19:55

回复 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
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2