标题: [文本处理] 请问批处理怎么将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 编辑
- #&cls&powershell "iex(gc '%~0'|out-string)"&pause
- $txt=foreach($line in gc a.txt){
- $newline=@()
- $line.split("",[StringSplitOptions]::RemoveEmptyEntries)|%{
- if($_ -match '\d'){$newline+=([timespan]$_).totalmilliseconds}else{$newline+=$_}
- }
- $newline -join "`t"
- }
- sc new_a.txt $txt
复制代码
调用powershell来转换
作者: yakeyun 时间: 2022-4-28 18:49
本帖最后由 yakeyun 于 2022-4-28 20:54 编辑
回复 1# vicodin
来个纯P,效率比较慢,有兴趣的可以修改下,提下速:- @echo off&setlocal enabledelayedexpansion
- cd /d "%~dp0"
- (
- REM=========================================================
- for /f "tokens=1-3,*" %%a in (a.txt) do (
- for /f "tokens=1-2,* delims=:" %%e in ('echo %%a') do (
- for /f "tokens=1,* delims=." %%g in ('echo %%g') do (
- set AD=%%d
- set Ha=%%h
- set /a Ea=%%e * 60 * 60 * 1000
- set /a Fa=%%f * 60 * 1000
- set /a Ga=%%g * 1000
- set /a AA=!Ea!+!Fa!+!Ga!+!Ha!
- )
- )
- REM=========================================================
- for /f "tokens=1-2,* delims=:" %%e in ('echo %%b') do (
- for /f "tokens=1,* delims=." %%g in ('echo %%g') do (
- set Hb=%%h
- set /a Eb=%%e * 60 * 60 * 1000
- set /a Fb=%%f * 60 * 1000
- set /a Gb=%%g * 1000
- set /a AB=!Eb!+!Fb!+!Gb!+!Hb!
- )
- )
- REM=========================================================
- for /f "tokens=1-2,* delims=:" %%e in ('echo %%c') do (
- for /f "tokens=1,* delims=." %%g in ('echo %%g') do (
- set Hc=%%h
- set /a Ec=%%e * 60 * 60 * 1000
- set /a Fc=%%f * 60 * 1000
- set /a Gc=%%g * 1000
- set /a AC=!Ec!+!Fc!+!Gc!+!Hc!
- )
- )
- echo,!AA! !AB! !AC! !AD!
- )
- ) >new_a.txt
- echo.
- echo,数据处理完毕!!!
- echo.
- pause>nul
复制代码
作者: xczxczxcz 时间: 2022-4-28 20:29
看来 偶们对纯P的理解有误!
回复 vicodin
来个纯P,效率比较慢,有兴趣的可以修改下,提下速:
yakeyun 发表于 2022-4-28 18:49
作者: xczxczxcz 时间: 2022-4-28 20:30
- [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
这样简洁一点:- @echo off
- cd /d "%~dp0"
- (for /f "tokens=1-4" %%h in ('type "1.txt"') do (
- call :Time2MI %%h
- call :Time2MI %%i
- call :Time2MI %%j
- echo,%%k
- ))>"2.txt"
- goto :eof
-
- :Time2MI
- for /f "tokens=1-4 delims=:." %%a in ("%1") do (
- set /a HH=1%%a-100
- set /a MM=1%%b-100
- set /a SS=1%%c-100
- set /a MI=1%%d-1000
- )
- set /a HH2MM=HH*60
- set /a MM+=HH2MM
- set /a MM2SS=MM*60
- set /a SS+=MM2SS
- set /a SS2MI=SS*1000
- set /a MI+=SS2MI
- set /p "=%MI% "<nul
- goto :eof
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |