[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请问批处理怎么将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 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

评分人数

TOP

本帖最后由 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

评分人数

TOP

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


回复  vicodin

来个纯P,效率比较慢,有兴趣的可以修改下,提下速:
yakeyun 发表于 2022-4-28 18:49
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

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

评分人数

QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 4# xczxczxcz

由于不存在余数计算,已经把shell计算命令改了,速度要快很多。

TOP

感谢几位大神
厉害厉害
学习了

TOP

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表