为什么我的批处理文件中的 ping 命令会循环执行?

pra*_*etp 8 windows-7 ping batch-file

我在 Windows 7 中创建了一个 .BAT 文件,其中包含以下行:

PING XXX.XXX.XXX.XXX -t
Run Code Online (Sandbox Code Playgroud)

(XXX 替换实际 IP 号)。但是,当我双击这个批处理文件时,我可以看到 ping 命令在循环中重复执行。我什至试图重命名为ping.BATping.CMD但结果是一样的。

我想避免通过命令提示符编写 ping 命令,这就是我创建批处理文件的原因。我不知道为什么将相同的语句放入批处理文件时会不断调用 ping 命令。

aki*_*ira 16

由于您没有提供您不喜欢的任何输出或屏幕截图,因此有点不清楚您面临的问题究竟是什么,但我将解释我看到的两个最可能的问题:

鉴于您的脚本被调用ping.bat并且如下所示:

 ping example.com
Run Code Online (Sandbox Code Playgroud)

然后解释器 ( cmd.exe) 搜索/探测环境变量中的路径%PATH%,寻找看起来像ping... 的东西,它通过附加每个%PATHEXT%包含类似.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC. 所以,称只是pingping.bat电线来搜索ping.com ping.exe ping.bat等等。解释器将ping.bat在当前工作目录(您的ping.bat)中找到 a并调用它。

所以,在这里你会有一个很好的递归:ping.cmd 执行第一行,搜索“ping”,找到“ping.cmd”,执行第一行,搜索“ping”,找到“ping.cmd”,执行第一行,搜索“ping”,找到“ping.cmd”...

您可能遇到的第二个问题是:

批处理文件的解释器通常会重复您写入 .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
Run Code Online (Sandbox Code Playgroud)

如果您想C:\Users\XYZ\Desktop>ping www.superuser.com在脚本的输出中删除,那么您必须在脚本中的每一行前面加上一个@(例如,'@ping www.superuser.com'),或者@echo off在您输入的命令行之前放置一个想“安静”地执行。

TL; 博士; 不要将您的 bat 文件称为与现有程序相同的文件。


小智 11

我有同样的问题,

ping.bat 包含几行 ping 命令

ping host1
ping host2
ping host3
...
Run Code Online (Sandbox Code Playgroud)

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)?
Run Code Online (Sandbox Code Playgroud)

要解决它,只需重命名ping.bat,这样它就不会在批处理文件中调用自己或使用 ping.exe 作为批处理文件中的命令

ping.exe host1
ping.exe host2
ping.exe host3
...
Run Code Online (Sandbox Code Playgroud)


n0p*_*0pe 3

-t 参数使 ping 连续。

也许删除 -t 参数,然后告诉你的批处理脚本在杀死 cmd 屏幕之前等待你按 Enter 键。

有一段时间没有使用 Windows,但这应该可以:

ping xxx.xxx.xxx.xxx
pause
exit
Run Code Online (Sandbox Code Playgroud)