2016-12-07 4 views
0

ifの状態が:nbigの2番目のバッチスクリプトで失敗しています。 (私はこれを各明細の後に@echoを使って見つけました)。ただし、@echoの内部のifステートメントのように、正常に実行されるとif内のSETステートメントが成功します。これは非常に独特で、私は何が間違っているのか分かりません。IFステートメントでバッチスクリプトが失敗する

私のコードはここにある:

:: Set the day and night values 
set /A nighttemp = 2700 
set /A daytemp = 6500 
:: Set Transition Duration 
set /A transitionduration = 60 
:: Set times in minutes from midnight 
set /A tnight = 1380 
set /A tday = 480 

For /f "tokens=1-4 delims=/:." %%a in ("%TIME%") do (
    SET /A HH24=%%a 
    SET /A MI=%%b 
    SET /A SS=%%c 
    SET /A FF=%%d 
) 

SET /A mins = %HH24%*60 + %MI% 
SET /A tdaywindow = %tday% + 60 
SET /A tnightwindow = %tnight% + 60 

if %tnight% GEQ %tday% (GOTO NBIG) 
if %tnight% LSS %tday% (GOTO DBIG) 

pause 

:NBIG 

if %mins% LSS %tday% (SET /A temp = %nighttemp%) 
if %mins% LSS %tdaywindow% (SET /A temp = (%daytemp% - %nighttemp%)*((%mins% - %tday%)/60) + %nighttemp%) 
if %mins% LSS %tnight%(SET /A temp = %daytemp%) 
if %mins% LSS %tnightwindow%(SET /A temp = (%nighttemp% - %daytemp%)*((%mins% - %tnight%)/60) + %daytemp%) 
GOTO ENDING 

:DBIG 
if %mins% LSS %tnight%(SET /A temp = %daytemp%) 
if %mins% LSS %tnightwindow% (SET /A temp = (%nighttemp% - %daytemp%)*((%mins% - %tnight%)/60) + %daytemp%) 
if %mins% LSS %tday% (SET /A temp = %nighttemp%) 
if %mins% LSS %tdaywindow% (SET /A temp = (%daytemp% - %nighttemp%)*((%mins% - %tday%)/60) + %nighttemp%) 
GOTO ENDING 

:ENDING 
@echo %temp% 
pause 

::%~dp0\redshift.exe -O %temp% 

A正しく実行されているプログラムは、しかし、それエラーをtempの値を@echo必要があります。

(脇:これは、カスタム倍と赤方偏移のプログラムを実行することです...)

+1

を使用して、コードを簡素化することができますスタックをお読みくださいオーバーフロードキュメントページ[バッチファイルの変数](http://stackoverflow.com/documentation/batch-file/3528/)。 – Mofi

答えて

2

バッチパーサはとてもSET/A内の閉じ括弧があり、SET /コマンドの前に開いたり閉じ括弧を解析する必要があります開口部に施されるの前には、 SET/Aより前に適用されます。

あなたが引用符内全体の割り当てを囲み、いっその計算

if %mins% LSS %tdaywindow% (SET /A temp = (%daytemp% - %nighttemp%^)*((%mins% - %tday%^)/60^) + %nighttemp%) 

または内部に閉じ括弧をエスケープする必要があり、次のいずれか

if %mins% LSS %tdaywindow% (SET /A "temp = (%daytemp% - %nighttemp%)*((%mins% - %tday%)/60) + %nighttemp%") 

をしかし、おそらく最も簡単な解決策を捨てることです外側の括弧は完全に - コードを構造化した方法では必要ありません。

if %mins% LSS %tdaywindow% SET /A "temp = (%daytemp% - %nighttemp%)*((%mins% - %tday%)/60) + %nighttemp%" 

この最後のフォームでは必要ないものの、私はSET割り当てを引用符で囲んでいます。

あなたのエラーに関係のない、あなたはさらにSET /自動%または!を必要とせずに数値変数を拡張機能(/ Aを設定するためにのみ利用可能)

if %mins% LSS %tdaywindow% SET /A "temp = (daytemp - nighttemp)*((mins - tday)/60) + nighttemp" 
関連する問題