|
ping.batという名前のバッチファイル内で ping 192.168.1.1 というコマンドを実行するバッチファイルを作成します。そして、このバッチファイルが保存されているディレクトリに移動し、ping.batを実行します。 pingコマンドが実行されるかと思いきや、下図のような現象が起こります。 pingコマンドが何度も実行されているように見えますが、結果の出力はされていません。また、無限ループしているようなので ctrl + c で強制終了しています。 ![]() これは、同じ名前のファイルが存在した場合(この例の場合、ping.exeとping.bat)は、ある優先順位の順序に従ってファイルを検索し実行するためにこのような現象が起こります。 この優先順位は、まずカレントディレクトリのファイル、そしてPATHEXTに設定されている拡張子順、というような順序になります。 PATHEXTを見るには set | find "PATHEXT" とすると見ることができます。下図は私のPCのPATHEXTの設定です。 優先順位は、左が一番高く、右に行くほどさがっていきます。 ![]() この例の場合、ping.batが保存されているディレクトリからping.batを実行していますので、バッチファイル内のpingコマンドは、カレントディレクトリに存在するping.batファイルのことを指していることになります。 ですので、ping.batというファイル内でping.batを実行していることになり、上図のような無限ループに陥ります。 ただし、私のPCのPATHEXTの設定では、BATよりもEXEのほうが優先順位が高いため、ping.batを保存していないディレクトリからping.batを実行すれば意図したとおりにpingコマンドが実行されます。 このように、コマンドプロンプトで使用するコマンド名と同じ名前のバッチファイルを作成すると、意図と反する動きをすることがある場合があるので、コマンド名と同じ名前のバッチファイルは作成しないほうがいいです。 |