Variables windows命令行给出计算错误

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

我在这里找到了一段很好的代码:

作为一个独立的程序,它工作得很好。我将它与robocopy命令一起使用,基本上是用来确定写一个文件需要多长时间

我在其中添加了一个额外的变量,因为我想保留原始秒数以用于计算。因此,我添加了额外的行集合timeraw=%timetake%:

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