2017-07-26 17 views
0

私はバッチコードを美しいものにすることを決めました(それは、独自のサブ変数( 'hrs'と 'min'と 'sec'数学演算子)をコードの先頭にある変数( 'myformula')に追加し、その後、複数の "set/a ..."コマンドで変数(%myformula%)を呼び出して展開します。別の変数の中に変数を含む数式を保持する

私は%% hrs %%と!hrsを試しました!^mycareula!と同様に、^キャレットも、 "Missing operand"が表示されます。エラー。 これは、数値演算子が正しく展開されていないこと、または数値演算子が文字に変換されていることを示唆しています。

私は敗北を認めれば、すべてのものが完璧に機能し、コードの%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を使用し、defeatestのような答えは「set/mytime = the + original + formula」などのNON固有のソリューションを考慮します)本当の質問)。

@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コモンドを/ Aスイッチと共に使用すると自動的にアルファベット文字が変数とみなされ、%折り返しを必要とせずに展開されるためです。

これはであり、SET /?のを暗示しています。ヘルプトピックであり、さまざまなWebページやフォーラムでもう少し詳しく述べられています。

:start 
set myformula=hrs*60*60*100+min*60*100+sec*100+cen 
  • : - 私は振り返ってみると見つけることができる唯一の例だった

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

    このように私の質問への答えは「myformula」変数をSETINGときに、このコード行を使用することです

    セット/ a mytime =%myformula%

  • 次のコード行で意図どおりに完全に展開されます。
  • がその前にあり、エコー行が進行すると画面出力から証明されます。

誰が考えましたか?

+0

Me。 '%' -variablesは 'set myformula ='コマンドラインですでに解決(展開)されているので、当初の手法は失敗しました。 'hrs'、' min'などはまだ割り当てられていないので、(ほとんどの場合)空です。後で 'set/a mytime =%myformula%'を実行すると、実際に 'set/a mytime = * 60 * 60 * 100 + * 60 * 100 + * 100 +'のようなものが受け取られます。 'set myformula ='から '%'を取り除くと、何も解決されないので、 'set/a mytime =%myformula%'は完全な式を受け取って計算できます... – aschipfl

+1

[この回答](https://stackoverflow.com/questions/9922498/calculate-time-difference-in-windows-batch-file/9935540#9935540)のレビューに招待します。 – Aacini

関連する問題