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

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

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

PING XXX.XXX.XXX.XXX -t

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

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

答案1

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

假设您的脚本被调用ping.bat并且看起来像这样:

 ping example.com

然后解释器 ( cmd.exe) 在环境变量的路径中搜索/探测%PATH%类似于ping... 的内容,它通过附加每个后缀来实现这一点,其中%PATHEXT%包含类似于 的内容.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC。因此,仅从 调用会ping导致ping.bat搜索等等。解释器将在当前工作目录 (您的 ) 中ping.com ping.exe ping.bat找到并调用它。ping.batping.bat

所以你会有一个愉快的递归这里: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

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

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

答案2

我有同样的问题,

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

答案3

-t 参数使 ping 持续进行。

也许删除 -t 参数,然后告诉你的批处理脚本等待你按下回车键然后再关闭 cmd 屏幕。

有一段时间没用过窗户了,但这应该可行:

ping xxx.xxx.xxx.xxx
pause
exit

答案4

本地脚本执行似乎阻止 ping.exe 在脚本中运行。尝试右键单击,然后选择“以管理员身份运行”。我正在查找如何更新执行策略。

正当我以为自己对 Windows 有所了解时,他们却改变了它。


更新:递归是答案......

您不能将其命名为 ping.bat 并调用 ping.exe

您也不能将其命名为route.bat并调用route.exe。

例如,当我运行 ping.bat 时,然后再次将其作为 pingx.bat 运行:在此处输入图片描述

相关内容