アプリ版:「スタンプのみでお礼する」機能のリリースについて

セグメント内で使用されているIPアドレスを調べるために順番にPINGを飛ばす下記のバッチを作りました。

-----------------------------------------------------
@echo off

for /l %%A in (1,1,254) do (ping -n 1 192.168.1.%%A)

:EOF
-----------------------------------------------------


実行すると最初の数回は正常に動作したのですが、そのうちうまく実行できなくなりました。
実行するとDOS窓が一瞬開いて、すぐに終了してしまいます。(変数を変更してみても同じです。)
内容をいじっって何回か実行していると、たまに正常動作するのですが・・・。

原因と対処法が分かる方がいらっしゃったら、教えてください。
よろしくお願い致します。

A 回答 (4件)

EXPINGを使えば、同じことができてログも残せますよ。


http://www.woodybells.com/exping.html

参考URL:http://www.woodybells.com/exping.html
    • good
    • 0

いまどき、DOSのバッチで苦労するのはナンセンスだと思います。


私なら、もっと単純にします。

@echo off
ping -n 1 192.168.1.1
ping -n 1 192.168.1.2
ping -n 1 192.168.1.3

ping -n 1 192.168.1.254

たった254行です。
    • good
    • 3

問題を切り分けるために、まずダブルクリックで実行するのを止めましょう。



自分でDOS窓を開き、直接そのバッチを起動して、どのようなメッセージが表示されて問題が発生するのか分からなければ、対処も何もありません。

そこから次のステップを判断すべきです。

余談ですが、do以降の括弧は、つける習慣にしておくと、より複雑な処理を行う際にいいことがあるので、そのままの方がいいと思います。

コード的には、このように書く習慣にするのがベストです。

for /l %%A in (1,1,254) do (
ping -n 1 192.168.1.%%A
)

これで、複数コマンドを組み合わせるのも、自在だし2000やXPであれば、遅延環境変数展開を使うことで、さらに強力な処理が可能になります。
    • good
    • 0

手元のWinXPで実行してみましたが、正常動作しているように見えます。

ただ、構文的にdo以降のカッコはいらなかったはずです。
Windowsのヘルプにも、forの構文は以下のようにありますし。
------------------
for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]
------------------


ちなみに私の場合、こういった作業ではExpingを使用することが多いです。細かい条件を設定できますし、記録が簡単に残せるので。

ご参考まで

参考URL:http://www.woodybells.com/exping.html
    • good
    • 1

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