2017-07-26 41 views
0

我決定通過分配式(包含其自己的子變量(「小時」和「分鐘」和「秒」),以及數值運算來美化我的批處理代碼和數學運算符)添加到代碼頂部的變量('myformula'),然後在多個「set/a ...」命令中調用並展開變量(%myformula%)。保持與變量的公式內的另一個可變

我已經試過%%小時%%和!小時!和^插頁,以及!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/mytime = +原始+公式」這樣的答案 - 這不是對我的答案真正的問題)。

@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

好吧,有很多更多的試驗和錯誤,我自己找到了解決方案。將公式(用於算術評估)保存到變量時,不需要%字符換行。

這顯然是因爲SET coomand,與/ A開關使用時,自動假定任何字母字符是變量,並且擴展它們,而不需要任何%包裝。

提到在SET /?幫助主題,並在各種網頁和論壇中提到更多。我能找到回想起來,唯一的例子是 -

https://ss64.com/nt/set.html

這樣回答我的問題是使用此代碼行塞汀的「myformula」變量時:

:start 
set myformula=hrs*60*60*100+min*60*100+sec*100+cen 
  • 這按照預期在後面的代碼行完美地展開:

    set/a mytime =%myformula%

  • 作爲其前面和前面的回波線從他們的屏幕輸出證明。

誰會想到?

+0

我。邏輯上你的原始方法失敗了,因爲在'set myformula ='命令行中'%'變量已經被解析(擴展)了;因爲'hrs','min'等尚未分配,所以它們(最有可能)是空的;後來當你執行'set/a mytime =%myformula%'時,它實際上會收到一些類似於'set/a mytime = * 60 * 60 * 100 + * 60 * 100 + * 100 +'這個無效的cource。當從'set myformula ='中移除'%'-signs時,沒有東西可以解析,所以'set/a mytime =%myformula%'得到了完整的公式,可以計算出來...... – aschipfl

+1

我邀請你回顧[這個答案](https://stackoverflow.com/questions/9922498/calculate-time-difference-in-windows-batch-file/9935540#9935540) – Aacini

相關問題