• 締切済み

windowsXPでのバッチファイル作成について

windowsXPでのバッチファイル作成について質問させてください。ネットワーク機器の疎通確認をするよう以下を以下を作成しました。 <bat1> for /L %%i in (1,1,254) do ( ping -w 50 -n 1 192.168.1.%%i echo 192.168.1.%%i %errorlevel% ) 結果、正常応答とタイムアウトする機器があるのですが、errorlevelが全て0で返ってきてしまいます。 しかし・・・ <bat2> ping -w 50 -n 1 192.168.1.1 echo 192.168.1.1 %errorlevel% とした場合、タイムアウトした場合errorlevelは期待どおり1となります。これはなぜでしょうか。bat1の記述がおかしいのでしょうか。 また、本来はerrorlevelではなくタイムアウトやルータからのエラーなど、応答によって後の処理やエラー画面を変えたいのですが、どのように作るのが良いでしょうか。素人質問で申し訳ありませんが、よろしくお願い致します。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

括弧を使って複数文をまとめると、文の開始時点で%変数の置き換えを行ってしまいます。いくつか方法がありますが、わかりやすいのは括弧を使わず、 for /L %%i in (1,1,254) do call :sub %%i goto :EOF :sub ping -w 50 -n 1 192.168.1.%1 | find "bytes=32" >NUL echo 192.168.1.%1 %errorlevel% とするのがいいです。 pingが失敗するパターンをいくつかやってみると上のようにbytes=32の文字列で判断すると良いのがわかると思います。

monjiko
質問者

お礼

返信が遅れまして申し訳ありません。 早速使わせていただき、解決できました! ありがとうございました。助かります。

関連するQ&A

  • Virtual PCバッチ起動

    ping で応答しなかったら、バーチャルPCの起動させるというバッチプログラムを 作成しました。しかし、ログオンをして、手動でこのバッチファイルを 開くと動くのですが、タスクスケジューラにのせて実行させても動き ません。素人で申し訳ありませんが、なにがいけないものかご教示 いただけますでしょうか。 --------------------------------------------------- @echo off ping -w 1 -n 1 192.168.0.12 if errorlevel 1 goto error goto END :error "C:\Users\XXXXX\Virtual Machines\XXXXXX1.vmcx" :END ---------------------------------------------------

  • バッチファイル 戻り値

    いつも大変御世話になっております。 WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。 "ABC.bat"------------------------------------------------- @ECHO ON set bat_name="ABC.bat" call DEF.bat echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 "ABC.bat"------------------------------------------------- 上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。 "DEF.bat"------------------------------------------------- @ECHO ON set bat_name="DEF.bat" exit /b 10 "DEF.bat"------------------------------------------------- 実行結果は予想していたものと違っていました。 予想していた実行結果 : "ABC.bat" は戻り値 10 を受け取りました。 実際の実行結果     : "DEF.bat" は戻り値 10 を受け取りました。】 %ERRORLEVEL%のみを取得したかったのですが DEF.bat の set bat_name="DEF.bat" までも取得してしまいました。 bat_name はどうしても "ABC.bat"とCALLする側の変数を使用したいのですが 制御は難しいでしょうか? echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 の直前に 再度 set bat_name="ABC.bat" と記述しなければダメでしょうか? 尚、都合上、ECHO文と変数名は変えたくありません。 もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • バッチファイルの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 ============================================= よろしくお願いいたします。

  • バッチ・ログファイルへの出力

    <子シェル.bat>に以下のように正常/異常のEXITコードを出力させてます。 コマンド if %ERRORLEVEL% EQU 0 exit 0 if %ERRORLEVEL% NEQ 0 exit 100 <<親シェル.bat>>より上記子シェルをCallして正常/異常時にログファイルへメッセージを出力しようと思っています。 下記のように書いても正常/異常終了と関係なくログファイルへの出力はされませんでした。子シェルの実行自体はされてます。。 call 子シェル.bat IF %ERRORLEVEL% EQU 0 echo "OK" >>%logfile% 2>&1 IF %ERRORLEVEL% NEQ 0 echo "NG" >>%logfile% 2>&1 何が原因なのでしょうか・・・

  • PING一斉送信(Win98で)

    Windows98上でPINGを一斉送信するバッチを作成しています。 いろいろなサイトを見て、手元のXPで以下のバッチを作成し実行するとうまく動作しました。しかし98上で動かしてみたところ、なぜか無限ループになってしまいました。 ----------------------------------------------- @cls @echo PCの応答を調べます。 @ping -n 1 -l 8 192.168.11.5>address.txt @find /c "Request timed out." address.txt>nul @if errorlevel 1 goto A1 @if errorlevel 0 goto A0 @goto END @:A1 @echo 自分のPC:OK @goto END @:A0 @echo 自分のPC:NG @:END @pause (あとはこれは端末の分だけコピペする) ------------------------------------------------ どのようにすれば98上で動くか教えていただくと助かります。よろしくお願いします。

  • 連続でpingを実行するバッチファイルがうまくいきません。

    連続でpingを実行するバッチファイルを作成してたんですが、うまくいきません。 実行すると、"プロセスはファイルにアクセスできません。別のプロセスが使用中です。"って表示されます。 日付と時間はテキストに記載されるんですが、pingの結果が記載されません。 バッチファイルの内容は以下の通りです。 @echo off echo -------------->>d:\result.txt echo PINGテスト結果>>d:\result.txt echo -------------->>d:\result.txt echo 実行年月日 >>d:\result.txt date /T>>d:\result.txt echo 実行時間 >>d:\result.txt time /T>>d:\result.txt for /L %%f in (1,1,254) do ping -n 4 -w 50 192.168.100.%%f>>d:\result.txt exit コマンドプロンプトで、 for /L %f in (1,1,254) do ping -n 4 -w 50 192.168.100.%f>>d:\result.txt と実行すると、pingの結果がテキストに記載されました。 よろしくお願いします。

  • pingの条件処理について。

    宜しくお願いします。 ping を利用して、その結果を条件判断し、ログに出力するバッチを作成してみました。 OS:xp、Windows Server 2003 ***TEST.bat*** rem 変数セット set log=L:\log\test.log set machine=TESTOS rem 疎通確認(50回) ping -n 50 %machine% rem 疎通確認結果の条件処理判定 if errorlevel 1 ( echo %machine% のpingが通りません。 >> %log% ) else ( echo %machine% のpingが通りました。 >> %log% ) ***TEST.bat*** ですが、これで実行すると、 何故か最初のping処理(50回)しか行われず、その後の条件判断(if ~)が実行されません。 (%log%にも出力されません) これを解決するには、どのように修正すれば良いのでしょうか? 上手く稼働確認が出来ず、困っています。 お手数をお掛けしますが、ご教授を宜しくお願いします。

  • バッチファイルでPINGログ取得

    バッチファイルでPINGのログを取得したいと考えています。 下記のバッチを作成して実行してみましたが @echo off set LOG=log.log echo "------------ START -------------" >> %LOG% ping -w 1 -n 1 localhost >> %LOG% 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」とエラーメッセージが延々と表示されます。 ログにはECHOで出力したSTARTしかありません。 コマンドラインから上記のPINGを打つと正常に終了します。 使用しているOSはWinXP SP2です。 何が原因なのか解決法をご存知の方がいらっしゃいましたら宜しくお願いします。

  • バッチファイル(.bat)へWSH(.wsf)のエラーコードの返し方について

    はじめまして、kiwi88と申します。 バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出すプログラムを作成しました。 そこで、wshスクリプトで実行されたエラーコードを呼び出しもとのバッチファイル(.bat)に返すことはできますでしょうか。 以下はバッチファイル(.bat)からwshスクリプト(.wsf)を呼び出す箇所のソースです。 ◆バッチファイル(test.bat)◆ ---------------------------------------- ~※処理内容省略~ cscript test.wsf //nologo //Job:wshscript > batch.log IF %ERRORLEVEL% NEQ 0 GOTO ERR exit :ERR set ret=%ERRORLEVEL% echo ****** [%:ERRORLEVEL=%ret%] ****** > err.txt exit %ret% ---------------------------------------- 以下はwshスクリプト(.wsf)のエラーコードを返す箇所のソースです。 ◆wshスクリプト(test.wsf)◆ ---------------------------------------- <job id = "wshscript"> <script language = "VBScript"> <![CDATA[ Option Explicit Function Main() ~※処理内容省略~ err = Err.Number Main = err End Function ]]> </script> </job> ---------------------------------------- 長くなってしまい、申し訳ありませんが、 ご教授願えますでしょうか。 宜しくお願いいたします。

  • 【初心者】バッチファイルの作成方法について

    Windowsバッチファイルの作成方法について質問させて下さい。 以下の処理を行うバッチファイルの作成を考えています。 ・C:\Program Files\Microsoft Visual Studio 8\VCへ移動 ・上記フォルダ内にある vcvarsall.batファイルを実行 ・C:\Program Files\Microsoft Platform SDKへ移動 ・上記フォルダ内にある SetEnv.cmdファイルを実行 ・Cドライブ直下(C:\)へ移動 目的としては、「Microsoft Visual C++2005」の環境設定ファイルを バッチファイルにて一括実行することです。 実際に自分で作成したバッチファイル(setenv.bat)の内容は 以下のとおりです。 ---------------------------------------------------------- @echo off echo setenv.batを実行します cd C:\Program Files\Microsoft Visual Studio 8\VC echo vcvarsall.batを実行して環境設定をおこないます vcvarsall.bat cd C:\Program Files\Microsoft Platform SDK echo SetEnv.cmdを実行して環境設定をおこないます SetEnv.cmd cd C:\ ---------------------------------------------------------- [実行結果] C:\>setenv.bat setenv.batを実行します vcvarsall.batを実行して環境変数を設定します Setting environment for using Microsoft Visual Studio 2005 x86 tools. 実行結果のとおり、setenv.batの実行までしか処理が行われず、 vcvasall.batは実行されません。 原因と対処方法について、どなたか教えて頂けませんでしょうか?