web-dev-qa-db-ja.com

バッチファイルのpingコマンドがループで実行されるのはなぜですか?

次の行を持つ.BATファイルをWindows7で作成しました。

PING XXX.XXX.XXX.XXX -t

(XXXは実際のIP番号を置き換えます)。ただし、このバッチファイルをダブルクリックすると、pingコマンドがループで繰り返し実行されているのがわかります。 ping.BATの名前をping.CMDに変更しようとしましたが、結果は同じです。

コマンドプロンプトを使用してpingコマンドを記述したくないので、バッチファイルを作成しました。同じステートメントがバッチファイルに入れられたときに、なぜpingコマンドが継続的に呼び出されるのかわかりません。

7
pradeetp

嫌いなものの出力やスクリーンショットを提供していないので、直面している問題が正確に何であるかは少しわかりませんが、私が目にする最も可能性の高い2つの問題について説明します。

スクリプトがping.batと呼ばれ、次のようになっているとします。

 ping example.com

次に、インタプリタ(cmd.exe)は、環境変数%PATH%内のパスを検索/プローブして、ping ...のように見えるものを探します。これは、%PATHEXT%のようなものを含む.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCの各サフィックスを追加することによって行います。したがって、ping.batleadsからping.comping.exeping.batなどを検索するためにpingを呼び出すだけです。インタプリタは現在の作業ディレクトリ(ping.bat)でping.batを見つけて呼び出します。

だから、あなたは素晴らしい 再帰 ここにあります:ping.cmdは最初の行を実行し、「ping」を検索し、「ping.cmd」を見つけ、最初の行を実行し、「ping」を検索し、 「ping.cmd」は、最初の行を実行し、「ping」を検索し、「ping.cmd」を見つけます...

あなたが持っているかもしれない2番目の問題はこれです:

バッチファイルのインタプリタは通常、.bat /.cmdファイルに書き込んだコマンドを繰り返します。したがって、このping www.superuser.comのようなものは次のようになります。

 C:\Users\XYZ\Desktop>ping www.superuser.com

 Ping wird ausgeführt für superuser.com [64.34.119.12] mit 32 Bytes Daten:
 Antwort von 64.34.119.12: Bytes=32 Zeit=110ms TTL=46
 Antwort von 64.34.119.12: Bytes=32 Zeit=107ms TTL=46

スクリプトの出力でC:\Users\XYZ\Desktop>ping www.superuser.comを削除する場合は、スクリプトの各行の前に@(たとえば、 '@ ping www.superuser.com')を付けるか、の束の前に@echo offを配置する必要があります。 「静かに」実行したいコマンドライン。

TL; DR;既存のプログラムと同じようにbatファイルを呼び出さないでください。

14
akira

私も同じ問題を抱えていました、

ping.batには数行のpingコマンドが含まれていました

ping Host1
ping Host2
ping Host3
...

cmd Shellの出力は次のようになり、次のようにブレークするまでループを繰り返し続けました ctrl+C

c:\ping Host1    
c:\ping Host1    
c:\ping Host1    
c:\ping Host1    
c:\ping Host1
...

c:\ping Host1
^CTerminate batch job (Y/N)?

それを解決するには、ping.batの名前を変更するだけで、バッチファイルで自分自身を呼び出さないか、バッチファイルのコマンドとしてping.exeを使用します。

ping.exe Host1
ping.exe Host2
ping.exe Host3
...
11
Stefan

-tパラメーターは、pingを継続的に行います。

たぶん、-tパラメータを削除してから、cmd画面を強制終了する前にEnterキーを押すのを待つようにバッチスクリプトに指示します。

しばらくウィンドウを使用していませんが、これは機能するはずです。

ping xxx.xxx.xxx.xxx
pause
exit
3
n0pe

私も同じ問題を抱えていました。解決策は次のとおりです。

Ping.batファイルの名前をpingtest.batに変更します

そして、それが含まれていることを確認してください:

ping xxx.xxx.xxx.001
ping xxx.xxx.xxx.002
ping xxx.xxx.xxx.003
一時停止

これにより、1つまたは複数のアドレスにpingを実行でき、結果が画面に表示されます。このバッチファイルは、ダブルクリックすることでPCのどこからでも実行できます。

3
user277896

右クリック-Run As Administratorが私のために働いた。

1
Amit Raut

ローカルスクリプトの実行により、スクリプトでping.exeが実行されないようです。右クリックして、「管理者として実行」してみてください。実行ポリシーを更新する方法を探しています。

私がWindowsについて何か知っていると思ったとき、彼らはそれを変えました。


更新:再帰が答えです...

Ping.batと呼んでping.exeを呼び出すことはできません

また、route.batと呼んだりroute.exeと呼んだりすることもできません。

たとえば、ping.batを実行したら、pingx.batとして再度実行します。 enter image description here

1
mgjk