[CMD计算] 请求修正一个有问题的逐行计算用批处理

如题,我有一个如下所示的文本文件:

6.56
9.31
0
9.33
10.69
0
10.7
12.83
0
12.85
14.93
0

每行都是一个以秒计数的时间,只有0的行为分隔标记行。
现在需要将其转换为00:00:00:000格式的时间,因此写了如下批处理进行测试:

@ECHO OFF
FOR /F %%G IN (srt.txt) DO (
    SET _MIN=0
    SET _SEC=0
    SET _MSC=0
    SET _CAL=%%G
    SET /A "_CAL*=1000"
    SET /A "_MIN=_CAL/60000"
    SET /A "_CAL-=_MIN*60000"
    SET /A "_SEC=_CAL/1000"
    SET /A "_CAL-=_SEC*1000"
    SET /A "_MSC=_CAL%%1000"
    @ECHO ON
    ECHO 00:%_MIN%:%_SEC%:%_MSC%
    @ECHO OFF
    PAUSE)
PAUSE

然而此脚本只能循环输出00:::。因此求助,希望能找出其中错误以便纠正。

1 Like

不是很好搞
1.虽然官方文档好像没明确,但据说set /a的表达式只能处理32位的整形,你试试看set /a "c=12.34+5"就报错
2.在for 的()里想要变更变量值话还要setlocal里启动变量延迟,并且用!而不是%来使用引用变量,好像是因为进入()前,解释器已经对()里变量进行了解析并替换成当时的值了。

2 Likes

如果环境允许的话建议用 PowerShell,用正则一行命令就可以解决。

2 Likes

感谢。转去bash里折腾了。