1
In my batch script I have the following:

if somecondition (
   exit
) else ( 
    for /F "USEBACKQ tokens=4,6,8" %%a in (systeminfo ^| qgrep -e "System Up Time:") do set days=%%a&set hours=%%b&set minutes=%%c
    set /A timepassed=%days%*24*60+%hours%*60+%minutes%
   if "%timepassed%" leq 30 (
   echo %timepassed% 
   ) else (
   echo %time$  
   ) 
)

値30と比較する前に、経過した変数が設定されていることを確認する方法はありますか?時々、コードのこの部分が実行されると、タイムパスは本来あるべきものではなく「」であると評価されるように見えます。

時間をありがとう

4

1 に答える 1

3

さて、あなたはブロックに環境変数を設定し、同じブロックでそれを読み取っています。ステートメントが実行されるときではなく、解析されるcmdときに環境変数を展開するため、これは機能しません(ブロックはステートメントであるため、ブロックに入る前に、ブロック内はすでにその値に置き換えられています)。%timepassed%

変数展開をステートメントの実行時に移動するには、次を追加します。

setlocal enabledelayedexpansion

バッチの開始時に、!timepassed!代わりにを使用します%timepassed%。同様に、ブロックで設定および使用される他の変数についても同様です。

于 2012-07-19T19:28:24.220 に答える