• ベストアンサー

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上で動くか教えていただくと助かります。よろしくお願いします。

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

  • ベストアンサー
  • mii-japan
  • ベストアンサー率30% (874/2820)
回答No.7

#4です ラベルにブランクを入れているせいです ブランクは区切り文字として扱われます (昔 ブランク入りのファイル名で登録され、全くアクセスできず、削除もできず苦労したことを思い出しました) END 1と END 2 は 両方とも END で処理されるはずです 他のラベルも同様 最初にコピペと省略しないで、きちんと書けば 一回で解決したと思います 以後の参考にしてください

kaga2063
質問者

お礼

出来ました。ありがとうございました。 質問の仕方は以後気を付けます・・・。

その他の回答 (6)

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.6

#1です。 同じラベルを使いまわしてるせいだと思います。 2回目の処理でA1またはA0というラベルは1回目の処理でも使ってるのでそっちに飛んでるだけだと思います。 各処理ラベル名を変更すれば問題ないかと。 たとえば1回目のラベルを A1_0 と A1_1、2回目のラベルを A2_0 と A2_1 ってしたり。

kaga2063
質問者

お礼

ありがとうございました。 参考にしてなんとか出来ました。

  • ZENO888
  • ベストアンサー率49% (8944/18242)
回答No.5

>複数のグループがあるため ExPingはレジストリを使わずに、設定ファイルでホスト等の設定も記録してるので、異なるフォルダに複数インストールして、起動すれば各フォルダ単位でグループ分け出来ますけど。(複数同時起動も可能)

  • mii-japan
  • ベストアンサー率30% (874/2820)
回答No.4

>(あとはこれは端末の分だけコピペする) #3までの回答で修正したものを少なくとも2端末分コピーしたものを書いてください if errorlevel 1 goto A1 if errorlevel 0 goto A0 goto END :A1  ********** echo 自分のPC:OK goto END :A0  ********** echo 自分のPC:NG :END ********** *****部のラベルとgotoの飛び先が予想外のところになっているのだと(ENDが最後ではなく、第一端末の処理部になっているとか)

kaga2063
質問者

お礼

以下のように修正しました。 ------------------------------------------------ @cls @echo off 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 1 :A1 echo 自分のPC:OK goto END 1 :A0 echo 自分のPC:NG :END 1 ping -n 1 -l 8 192.168.12.5>address.txt find /c "Request timed out" address.txt>nul if errorlevel 1 goto A1 if errorlevel 0 goto A0 goto END 2 :A1 echo 自分のPC:OK goto END 2 :A0 echo 自分のPC:NG :END 2 pause ---------------------------------

  • ZENO888
  • ベストアンサー率49% (8944/18242)
回答No.3

直接の回答じゃないけど、下記のようなソフトを使うのはダメ? ExPing http://www.woodybells.com/exping.html

kaga2063
質問者

お礼

このソフトも検討したんですが、複数のグループがあるため、出来ればバッチがいいんですが・・・。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

無限ループで実行し続けている行(コマンド)は、どれですか。それをまず教えてください。 それが分かれば、その中にあるコマンドを実行し続けている原因を調べることができます。

kaga2063
質問者

お礼

下記の通りです。お手数ですがよろしくお願いします。

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

全然回答とは違うのですが、全部の行の先頭に@マークを書くよりも、一番最初に @echo off としたほうが楽だし、見やすいですよ。 無限ループになるというのは、冒頭から繰り返してしまうということでしょうか?

kaga2063
質問者

お礼

ありがとうございます。 @echo off にしました。これすら知りませんでした・・・。こっちの方が断然見やすいですね。 無限ループについての詳しい説明が抜けていました。 単独ですと起きないのですが、同じ処理を2度続けると2度目の部分が無限ループし、延々とPINGを飛ばして、答えを出して・・・を繰り返します。 goto文が関係していると思い、goto文の後の名前を変えてみたのですが駄目でした。

関連するQ&A

  • BATのIF文について質問

    @echo off cls set LOGFILE=C:\%COMPUTERNAME%.log find C:\temp\setting.txt "SERVER01" /I if %ERRORLEVEL% == 1 GOTO END if %ERRORLEVEL% == 0 ( set MESSAGE=SEVER01の環境です echo %MESSAGE% echo %MESSAGE% >> %LOGFILE% GOTO SET1 ) :SET1 echo テスト >> %LOGFILE% :END こんな簡単なBATを作成してみましたがERRORLEVELが0の時処理されません (「SEVER01の環境です」がLOGに書き込まれません) (もちろんsetting.txtには「SERVER01」の文字が入ってます) (FINDのあと、「echo %errorlevel」を記述して0にもなっているのですが) IFの構文として間違っていますか?どなたかご教授ください。 OSはWindowsXP SP3 64Bitです。

  • 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 ---------------------------------------------------

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

  • バッチ処理について

    お世話になります。 バッチファイルを作成して、サーバー間でファイルのコピーを行おうと思ってます。 サーバーA:win2003server standerdEditon サーバーB:win2003server standerdEditon サーバーC:win2003server R2 standerdEditon(ServicePack1) A、Bからnet useコマンドでCをマウントしてます A→Cのコピーは大丈夫なのですが、 B→Cでは頻繁にnet useコマンドで失敗します。 サーバーBのバッチファイル if not exist P:\ net use P: \\serverC\test >> log.txt if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% >> log.txt &goto END if ERRORLEVEL 0 echo 正常終了 >> log.txt のようにしているのですが、エラーなのに、 「エラー発生」がログに出ずに終了してます。 「正常終了」も 「エラー発生」もログに出ないということは、if文で評価されてないように 思うのですが、&gotoで次の処理を飛ばしているので、終了のログは出てます。 説明が不足しておりましたら追加させていただきますので、 なぜこの現象が発生するのかお知恵をお貸しいただければ幸いです。 よろしくお願いします。

  • 以下のtest.batでtest.txt中のダブルコーテションを削除し

    以下のtest.batでtest.txt中のダブルコーテションを削除したいと考えています。 【test.bat】 @echo off if "%1"=="" goto end set fname=%1 copy %fname% org >nul type nul >%fname% for /f %%a in ( org ) do (set line=%%a&& call :sub) del org goto end :sub set l=%line:"=% echo %l%>>%fname% goto :EOF :end 【test.txt】 "test1",101,1 "test2",201,2 "test3",301,3 dos窓からtest.bat test.txtを実行し、test.txt の内容を確認すると、 test1,101, という結果になります。 なぜ、最後の数字が削除されるのか? 2行目、3行目のデータが無くなるのは? というところがわかりません。 単純にダブルコーテーションを削除するにはどうしたらよいでしょうか? よろしくおねがいします。

  • 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を実行するバッチファイルを作成してたんですが、うまくいきません。 実行すると、"プロセスはファイルにアクセスできません。別のプロセスが使用中です。"って表示されます。 日付と時間はテキストに記載されるんですが、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の結果がテキストに記載されました。 よろしくお願いします。

  • 終了コード errorlevel の考え方について

    こんばんは。 OSはWindowsXP Proを使っています。 テキストファイルに書いてある値を 終了コードにするバッチファイルを作成しました。 以下の2ファイルを同じディレクトリに保存します。 test.txt ┌--------┐   1 └--------┘ test.bat ┌---------------------------------------┐   @echo off   find "0" test.txt   if not errorlevel 1 exit /b 0   find "1" test.txt   if not errorlevel 1 exit /b 1   echo テキストは0~1の値ではありません。   exit /b 2 └---------------------------------------┘ この状態で次のように実行します (1) C:\>test.bat ---------- TEST.TXT ---------- TEST.TXT 1 (2) C:\>echo %errorlevel% 1 (3) C:\>set errorlevel=0 (4) C:\>echo %errorlevel% 0 ※ここでtest.txtの中の数字を2にします。 (5) C:\>test.bat ---------- TEST.TXT ---------- TEST.TXT テキストは0~1の値ではありません。 (6) C:\>echo %errorlevel% 0 (7) C:\>set errorlevel= (8) C:\>echo %errorlevel% 2 となります。 (2)の結果から、(1)で実行した「exit /b 1」でerrorlevelに1が格納されることが判ります。 しかし、(6)の結果から、(3)で実行した「set errorlevel=0」が (5)で実行した「exit /b 2」より優先されていることが判ります。 しかし(7)でerrorlevelの値を消去したように思われますが、 (8)の結果から、(3)のセットを消去しつつ(5)で実行した「exit /b 2」を記憶しているように見えます。 この挙動について、どのように理解すれば良いのでしょうか。 また「exit /b ○」と「set errorlevel=○」でセットする違いについて教えて頂ければと思います。 お願いします。

  • IEのバージョンチェックとバージョンアップでBATの簡略化

    IEのバージョンチェックとバージョンアップでBATの簡略化 タイトルの通りで、なんとか仕事で使っている端末のバージョンチェックと 条件に合わない場合、バージョンアップするBATを作りました。 目的の作業は出来ますが、まだまだ勉強不足で簡略化するとしたら どのように短く出来ますか? お時間あるかたいましたらご教授下さい。 @echo off CLS echo IE ver6.0 の場合、IE7.0にアップグレードされます。 echo 実行続けますか? echo 中止:CTRL + C pause rem マウント net use T: \\server\setup$\microsoft\IE echo IEバージョン情報出力 REG QUERY "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v "version" > %temp%\IEverchek.log :XP_SP2 C: CD %temp% find IEverchek.log "6.0.2900.2180" if %ERRORLEVEL% == 0 GOTO verup_start if %ERRORLEVEL% == 1 GOTO XP_SP3 :XP_SP3 C: CD %temp% find IEverchek.log "6.0.2900.5512" if %ERRORLEVEL% == 0 GOTO verup_start if %ERRORLEVEL% == 1 GOTO IE7 :IE7 C: CD %temp% find IEverchek.log "7.0.5730" set message=環境は「IE 7.0 」の環境でした。 if %ERRORLEVEL% == 0 GOTO END if %ERRORLEVEL% == 1 GOTO IE8 :IE8 C: CD %temp% find IEverchek.log "8.0.6001" set message=環境は「IE 8.0 」の環境でした。 if %ERRORLEVEL% == 0 GOTO END if %ERRORLEVEL% == 1 GOTO Error :verup_start for /f "tokens=2 delims=[" %%i in ('ver') do set ver1=%%i for /f "tokens=2" %%i in ('echo %ver1%') do set ver2=%%i for /f "tokens=1-2 delims=. " %%i in ( 'echo %ver2%' ) do set OSVER=%%i.%%j rem -------%OSVER% Win2k=5.00 XP=5.1 XPx64=5.2----------- set OS_TYPE="" if "%OSVER%" == "5.1" set OS_TYPE=32 if "%OSVER%" == "5.2" set OS_TYPE=64 echo installing IE7.0 %OS_TYPE%bit..... echo please wait..... T: start /wait "" "IE7-WindowsXP-x%OS_TYPE%.exe" /passive /forcerestart /update-no goto verupend :Error echo Internet Explorer のレジストリキーが見つかりません。 echo 必要なら手動でインストールしてね。 pause exit :END echo. echo チェックOK echo %message%終了します。 echo. pause exit :verupend echo. echo バージョンアップしました echo. pause exit