• ベストアンサー

バッチファイルのif文の中の計算結果について

なぜ、結果1が7にならないのでしょうか? ---------- @ECHO OFF set flg=1 set value=2 if %flg%==1 ( set /a value=%value%+5 echo 結果1=%value% ) echo 結果2=%value% ---------- ◆実行結果 結果1=2 結果2=7 ----------

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5085/13292)
回答No.1

関連するQ&A

  • if文について

    cshで書いています。 if文がとおりません。。。 0: Event not found. このようなメッセージが出力されます。 if ($flg == "xxx") then echo "aaa" else if($flg == "yyy") then echo "bbb" exit else echo "ccc" exit endif 内容は上記のような感じです。 どなたか教えて下さい。

  • バッチファイル(for文)がうまく動かない

    以下のようなバッチファイルをWin2008上で実行しようとしています ------------------------------ @echo on set LOGFILE=C:\a.log set CONF=C:\a.txt FOR /F "tokens=1-3 delims=," %%i in (%CONF%) do ( echo %%i %%j %%k > %LOGFILE% 2>&1 ) ------------------------------ C:\a.txtの中身はこのようになっています ------------------------------ a,b,c e,f,g ------------------------------ 期待する結果は「1.」なのですが.batを実行しても「2.」の結果がログに表示されます どのように修正すれば期待の結果が得られますでしょうか ※ちなみに.batの実行ではなくコマンドプロンプトで[%%]を[%]に変更すれば正常に実行できました 1. ------------------------------ a b c e f g ------------------------------ 2. ------------------------------ e f g ------------------------------

  • バッチのFOR及びIF文

    バッチであるTEXTファイルから一部を置換して別のファイルを作成する処理を考えてます。 「あるTEXTファイル」にはSQL文があります。 SELECT CODE ||'","'|| NAME FROM TEST01 WHERE (UPDATEDATE || UPDATETIME) > TO_CHAR(_HENKAN_) の内容が入ってます。 このファイルから「_HENKAN_」をバッチファイル内で置換し、実行できるSQLファイルを作成する処理です。 しかし、FOR文の中のIF文で全然動かないです。 FOR /F "tokens=1 delims=" %%A IN (C:\sql.txt) DO ( if /i %%A=="TO_CHAR(_HENKAN_)" ( echo TO_CHAR(%HENKAN%) >> %出力ファイル% 2>&1←%HENKAN%は時間を設定済み*ここが問題 echo %%A ←テストのため ) else ( echo %%A >> %出力ファイル% 2>&1 ) ) 実行時はエラーはなく実行されますが、echo TO_CHAR(%HENKAN%)が全然効かないようです。 いや、そもそも if /i %%A=="TO_CHAR(_HENKAN_)"が効かないですね。echo %%Aで全SQL文が表示されます。 いろいろ調べたのですが、理由がわかりませんでした。 バッチに詳しい方は教えてください。 よろしくお願いします。

  • バッチファイルのIF文について

    お世話になります。 現在バッチファイルを作成中なのですが、作成したバッチファイルを実行すると 「"("の使い方が間違っています」というエラーでこけてしまいます。 原因箇所は、下記コマンドの★部のIF文であることはほぼ間違いないのですが、 Webサイトで紹介されている原因である、「"("の直前やIF文内にコメントがあると発生する」という 条件には当てはまらないためエラーになる原因がわからず、投稿させていただきました。 ============================================= REM メイン処理 if %FLAG% == 1 ( echo %MSG1%から%MSG2%へPingを送信 ping -n 2 %PING_HOST% ) else ( echo 該当する設定がありません ) pause REM pingが通らなかった場合にイベントログにエラーを出力する if %Errorlebel% == "1" (   ★ echo 疎通不可 eventcreate /L Application /T ERROR /id 999 /d "%MSG1%から%MSG2%へ疎通不可。" ) else (                   ★ echo 疎通 eventcreate /L Application /T INFORMATION /id 111 /d "%MSG1%から%MSG2%へ疎通確認。" ) pause ============================================= よろしくお願いいたします。

  • バッチファイルでのif文分岐

    ドラッグ・アンド・ドロップ(以下、D&D)によるバッチファイルを作成する際にダブルクリックでバッチファイルを開こうとする行為のフェールセーフを考えています。 現状では、以下のバッチファイルにファイルやフォルダをD&Dするとif文の分岐の箇所で終了してしまいます。 有識の方の教授をお願いします。 /* ↓↓ 以下コードです ↓↓*/ @echo off if "%1"=="" goto error rem D&Dされたパスを表示 echo %1 echo 終了しました。 goto end :error echo このファイルはダブルクリック形式ではありません。 echo ファイルやフォルダをD^&Dして下さい。 pause exit :end exit /* ↑↑ ここまで ↑↑ */ 開発環境 OS:WindowsXP 以上、よろしくお願いします。

  • バッチファイルの時刻

    下記は、6秒待って時刻を表示するのを繰り返す記述ですが、 「開始」の時間と「終了」の時間が同じになってしまいます。 【コード】 -------------------------------------------------- :flg_check if exist %FlgFile% ( echo %time% 開始 echo WScript.Sleep 6000 > %TmpFile% cscript //NoLogo %TmpFile% echo %time% 終了 goto flg_check ) -------------------------------------------------- 【結果】 -------------------------------------------------- 10:26:14.30 開始 10:26:14.30 終了 10:26:20.41 開始 10:26:20.41 終了 -------------------------------------------------- 開始時刻の6秒後の時刻が終了時刻にならないのですが、なぜでしょうか?

  • バッチファイル IF 複数条件方法

    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 異常終了】の表示がログ上に出力されるだろうと期待して実行した結果、 何も表示されてませんでした。 どこに問題があるのでしょうか?

  • if文で・・・

    booleanの判定するときのif文の書き方ですが、 (1) if( !flg ) then (2) if( flg != true ) then (3) if( flg == false ) then のどれにしますか?

  • if文がifにならない?

    よろしくお願いします。 連続投稿防止の為に、getenvで取得したIPアドレスと time()で取得した時間をcsvファイルに xxx.xxx.xxx.xxx<>1249494949 xxx.xxx.xxx.xxx<>1249494949 という風に記述をしてます。 具体的には、 <?php $ipdesu = "./ip.csv"; $ipgetdesu = getenv( "REMOTE_ADDR"); $times = time(); $hoge = 0; $roop_open = fopen( $ipdesu, "r"); while(! feof($roop_open)){ $roop_get = fgets( $roop_open); $roop_ex = explode( "<>", $roop_get); $hogehoge = $hoge++; //IPチェック if( in_array( $ipgetdesu, $roop_ex)){ echo "配列検索TRUE"; //時間チェック if ( "60" < $times - $roop_ex[1]){ $fp = file( $ipdesu); unset( $fp[$hogehoge]); $fp_open = fopen( $ipdesu, "w"); foreach ( $fp as $value){ fputs( $fp_open, $value); } fclose( $fp_open); }else{ echo "連投規制"; } }else{ $fal_open = fopen( $ipdesu, "a"); fputs( $fal_open, $ipgetdesu."<>".time()."\n"); fclose( $fal_open); echo "配列検索FALSE"; } } fclose( $roop_open); ?> と記述しています。 <まだ、始めたばかりなのでロック制限とかしてませんがそこはご勘弁を 上記を実行すると、if ここ else そこ の本来、真であれば「ここ」が 偽であれば「そこ」だけが実行されると思っていたのですが、 上記の実行結果は、「ここ」も「そこ」も実行されてしまい かつ、IPを記述したファイルの検索が2回め実行した時に 同じIP 127.0.0.1<>時間 127.0.0.1<>時間 とローカルで試してるのでIPが変更になるはずないのですが(DHCPは念の為しようしていません in_arrayでヒットしないのは何故でしょうか? また、ifが正しく動作しないのは多重ifとでも言えばいいのでしょうか? が悪いからでしょうか。 つたないソースで申し訳ないですが、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • バッチファイルが動かない

    バッチ初心者です。ご教授下さい。 処理としては、特定のプロセスが存在すれば、再度5秒後にチェックして存在すればOKと表示。 としたいのですが。項番08で「0 の使い方が誤っています。」で落ちてしまいます。 ただ再チェックの項番13~20を外せば通ります。 XPで動かしています。 何が間違っているのでしょうか。宜しくお願いします。 01 @echo off 02 set tasktmp=C:\Temp\cnttmp.txt 03 set vbstmp=C:\Temp\vbstmp.vbs 04 05 tasklist | find /c "【何かプロセス】" > %tasktmp% 06 for /f %%a in (' type %tasktmp% ') do set cnttmp=%%a 07 08 if %cnttmp% neq 0 ( 09 10 echo WScript.Sleep 5000 > %vbstmp% 11 cscript //NoLogo %vbstmp% 12 13 tasklist | find /c "【上と同じプロセス】" > %tasktmp% 14 for /f %%a in (' type %tasktmp% ') do set cnttmp=%%a 15 16 if %cnttmp% neq 0 ( 17 18 echo OK 19 20 ) 21 del %vbstmp% 22 23 ) 24 del %tasktmp% 25 exit