Variables windows命令行给出计算错误
我在这里找到了一段很好的代码: 作为一个独立的程序,它工作得很好。我将它与robocopy命令一起使用,基本上是用来确定写一个文件需要多长时间 我在其中添加了一个额外的变量,因为我想保留原始秒数以用于计算。因此,我添加了额外的行集合timeraw=%timetake%:Variables windows命令行给出计算错误,variables,command-line,cmd,Variables,Command Line,Cmd,我在这里找到了一段很好的代码: 作为一个独立的程序,它工作得很好。我将它与robocopy命令一起使用,基本上是用来确定写一个文件需要多长时间 我在其中添加了一个额外的变量,因为我想保留原始秒数以用于计算。因此,我添加了额外的行集合timeraw=%timetake%: set /a timetaken= ( %endtime% - %starttime% ) ***set timeraw=%timetaken%*** set /a timetakens= %timetaken% / 100 s
set /a timetaken= ( %endtime% - %starttime% )
***set timeraw=%timetaken%***
set /a timetakens= %timetaken% / 100
set timetaken=%timetakens%.%timetaken:~-2%
我的批处理文件还使用setlocal enabledelayedexpansion
有时它不能正确计算“开始时间”或“结束时间”。将其保留为08:30:22.35类型格式的原始时间,并导致错误:
Invalid number. Numeric constants are either decimal (17),hexadecima (0x11), or octal (021)
很明显,因为它包含非数字字符,比如:字符
我的批处理文件永远处于连续循环中,因为我正在使用它读取、写入、删除特定酷刑测试条件下的文件和文件夹
你知道为什么它会间歇性地不计算starttime或endtime变量吗
编辑:
我对整个脚本做了一些更改。我不再需要enabledelayedexpansion,清理一些if-then语句,并稍微简化代码。但我仍然偶尔会发现starttime或endtime变量保留为HH:MM:SS.CS的原始时间格式,并导致计算错误。老问题,但可能有括号块,当您更改括号内的变量时,需要使用延迟展开 运行此命令并检查差异
@echo off
set a=nothing
if z==z (
set a=b
echo %a%
)
pause
setlocal enabledelayedexpansion
set a=nothing
if z==z (
set a=b
echo !a!
)
pause
哎呀,这是一个将近一年的问题,没有答案 我假设这个问题现在已经解决了,所以作为记录,我会得出以下结论: “有时计算不正确”是因为小时/分/秒/百分之将包含“08”或“09”,它们不是八进制数 解决办法是
set /a startcsec=1%STARTTIME:~9,2% - 100
并对其他3个开始
时间段进行重复;然后用结束部分再次重复
此外,也可能是该小时显示为0。在这种情况下,我建议
set starttime=0%TIME: =%
set starttime=%startTIME:~-11%
set /a startcsec=1%STARTTIME:~9,2% - 100
其中第一行以“0”作为时间前缀,并用[nothing]替换空格
第二个仅选择结果的最后11个字符
最后一个是熟悉的表单,使用生成的hh:mm:ss.cc
格式
(显然,子字符串和计算方法的其余部分也需要实现)有人知道为什么会这样吗?
set starttime=0%TIME: =%
set starttime=%startTIME:~-11%
set /a startcsec=1%STARTTIME:~9,2% - 100