我决定通过将一个公式(包含自己的子变量('hrs'和'min'和'sec')以及数值运算和数学运算符)分配给变量来美化我的批处理代码( 'myformula')在我的代码顶部,然后在多个“set / a ...”命令中调用并展开变量(%myformula%)。
我尝试过%% hrs %%和!hrs!和^ carets,以及!myformula!,但我总是得到一个“缺少操作数”。错误。 这告诉我数学运算符没有正确扩展,或者数值被转换为字符。
我应该补充一点,如果我承认失败,一切都很完美,并用实际公式替换代码中的%myformula%。
屏幕输出可正确显示公式 -
My Formula : %hrs%*60*60*100+%min%*60*100+%sec%*100+%cen%
Missing operand.
My Time :
( OR - My Time : 1 depending on %, %%, !, ^, etc, etc ... )
有谁能建议如何让公式扩展%myformula%正常工作?
(我会考虑非本地解决方案,例如 - 使用javascript,使用cscript,使用powershell - 以及诸如“set / a mytime = the + original + formula”这样的最佳答案 - 因为不是我真实的答案题)。
@echooff
SETLOCAL ENABLEDELAYEDEXPANSION
:start
set myformula=%hrs%*60*60*100+%min%*60*100+%sec%*100+%cen%
:timer
rem - Timer code credits go to - rberteig (2014)
rem Convert t0 into a scaler in 100th of sec with no
seperator chars.
set /a t0=%time: =0%
set /a hrs=1%t0:~0,2%-100
set /a min=1%t0:~3,2%-100
set /a sec=1%t0:~6,2%-100
set /a cen=1%t0:~9,2%-100
echo My Formula : %myformula%
set /a mytime=%myformula%
rem - set /a mytime=!myformula! - does not work either.
echo My Time : %mytime%
:finish
pause
ENDLOCAL
exit /B 0
:EOF
答案 0 :(得分:0)
好的,有更多的试验和错误,我自己找到了解决方案。将公式(用于算术评估)保存到变量时,不需要%字符换行。
这显然是因为当与/ A开关一起使用时,SET coomand会自动将任何字母字符视为变量,并扩展它们而不需要任何%包装。
这是在SET /中提到?帮助主题,并在各种网页和论坛中提到了更多。我回想起来的唯一例子是 -
因此我的问题的答案是在设置" myformula"时使用此代码行。变量:
:start
set myformula=hrs*60*60*100+min*60*100+sec*100+cen
在以后的代码行中按预期完美展开:
设置/ a mytime =%myformula%
因为其前面和前面的回声线从它们的屏幕输出中得到证明。
谁会想到?