dポイントプレゼントキャンペーン実施中!

WindowsXP環境にて下記のバッチファイルがあります。

rem --- 時間変数 ---
set yyyy=%date:~-10,4%
set yy=%date:~-8,2%
set mm=%date:~-5,2%
set dd=%date:~-2,2%

rem --- ログフォルダ変数 ---
set LOG_DIR1=D:\LOG

rem --- ログファイル変数 ---
set LOG_FILE1=LOG.txt

set A=1

set B=2

IF %A% == 1 IF %B% == 2 (
echo %yyyy%%mm%/%dd% %HHMMSS%正常終了 >> %LOG_DIR1%\%LOG_FILE1%
) ELSE (echo %yyyy%%mm%/%dd% %HHMMSS%異常終了 >> %LOG_DIR1%\%LOG_FILE1%)

pause

上記プログラムだとログ上で【200912/10 正常終了】と表示されるのに、【set A=10】と変更して
【200912/10 異常終了】の表示がログ上に出力されるだろうと期待して実行した結果、
何も表示されてませんでした。

どこに問題があるのでしょうか?

A 回答 (2件)

期待する結果が出ていないソースだけの提示ではロジックが正確に分からないのでロジックを書いてもらといいかもしれません。


例えば、A=1かつB=2で正常終了、それ以外は異常終了にしたい、コードは今はこうなっていると。変数A,Bにはこういう値が入る可能性があるとかまでわかればなおよしと思います。
上記であればこんな感じではダメ?
@echo off
rem --- 時間変数 ---
set yyyy=%date:~-10,4%
set yy=%date:~-8,2%
set mm=%date:~-5,2%
set dd=%date:~-2,2%

rem --- ログフォルダ変数 ---
set LOG_DIR1=D:\LOG

rem --- ログファイル変数 ---
set LOG_FILE1=LOG.txt

set A=11

set B=2

IF "%A%-%B%" == "1-2" (
echo %yyyy%%mm%/%dd% %HHMMSS%正常終了 >> %LOG_DIR1%\%LOG_FILE1%
) ELSE (
echo %yyyy%%mm%/%dd% %HHMMSS%異常終了 >> %LOG_DIR1%\%LOG_FILE1%
)
    • good
    • 0

お書きのスクリプトだと、


IF %A%==1 (
 IF %B%==2 (
  echo 正常
 ) ELSE (
  echo 異常
 )
)
と同じです。つまり、A が 1 でないと何も表示されません。

簡単にやるには、%1 の方がお書きのような方法がいいですね。

他にはこういう方法も。
SET OKNG=NG
IF %A%==1 IF %B%==2 SET OKNG=OK
IF %OKNG%==OK (
 echo 正常
) ELSE (
 echo 異常
)
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!