如何在批处理文件中只对服务器进行一次ping操作?

16

我想学习如何编写批处理脚本,并尝试创建一个脚本,该脚本可以在命令行中自动运行此命令:

ping www.google.de -t

并显示ping值,因此它看起来像这样:
Reply from XXX.XXX.X.XX: time=30ms
Reply from XXX.XXX.X.XX: time=31ms
Reply from XXX.XXX.X.XX: time=29ms

我的问题是,当我将此命令作为脚本执行时,会导致以下结果: 运行批处理文件后的输出截图。 我的问题是它根本不会执行ping命令,而只是在控制台窗口中无限次插入命令,如屏幕截图所示。
我刚刚创建了一个新文件,在其中写入了“ping www.google.de -t”,将其保存为“ping.bat”文件,并通过双击它来执行它。
那么如何编写批处理文件以仅启动此命令一次并显示ping结果?

当我把这个命令输入为脚本时,你指的是什么?如果你将它放在批处理文件中,你可以在其前面加上 @ 符号来避免显示正在执行的命令。 - kenny
你的 ping 为什么运行了这么多次?你能发一下你的脚本吗? - DinoOcch
请展示你的代码。 - konsolebox
请勿将脚本命名为 ping.bat(或任何其他已用作命令的名称)。它只是不断地调用自身。 - Stephan
14个回答

51

我确定你一定将生成的批处理文件命名为“ping.bat”。如果你将文件重命名为其他名称,比如pingXXX.bat,它肯定会起作用。试一试。

我的批处理文件仅包含以下代码

ping 172.31.29.1 -t

使用文件名ping.bat

在此输入图片描述

使用文件名abc.bat

在此输入图片描述


哇!这是为什么?它应该是一些保留字,但为什么会出现这种行为... - Roman Kotenko
4
默认情况下,您的批处理程序将检查当前目录中是否有任何指令。因此,如果您在命名为ping的程序(即bat文件)运行时调用它,那么它会执行该程序而不是系统程序。 - Simon PA

22

在命令提示符窗口中输入ping /?,按下RETURN键后阅读短的帮助输出。或者查看以下内容:

  • ping - 有关此Windows命令的最新Microsoft文档
  • ping - Windows XP有关此Windows命令的文档

Microsoft对选项-t的解释如下:

指定Ping持续向目标发送回显请求消息,直到被中断。要中断并显示统计信息,请按CTRL+ENTER。要中断并退出此命令,请按CTRL+C

您可能想使用:

@%SystemRoot%\system32\ping.exe -n 1 www.google.de

或者首先检查服务器是否可用:

@echo off
set MyServer=Server.MyDomain.de
%SystemRoot%\system32\ping.exe -n 1 %MyServer% >nul
if errorlevel 1 goto NoServer

echo %MyServer% is available.
rem Insert commands here, for example one or more net use to connect network drives.
goto :EOF

:NoServer
echo %MyServer% is not available yet.
pause
goto :EOF

6

对于 bash(OSX),使用 ping google.com -c 1 命令进行 ping 测试(如果您是因为搜索而来到这里)。


4

如果您想要使用名称“ping.bat”,一个小技巧是使用以下代码:

@echo off
cd\ 
ping google.com -t

只需添加“cd \”即可解决问题... ;)

3

不确定您的具体需求,但是您发布的代码应该可以正常工作。如果您不想显示命令,请在脚本开头添加@echo off。如果我把下面的代码保存到一个名为test.bat的文件中,并在命令提示符中运行test.bat,它将正常工作。

@echo off
ping www.google.de -t

为了解决你所提出的问题,即无法识别“ping”命令,通常情况下,“ping”命令位于“C:\Windows\System32\”目录下,其中“C:\”是根目录。如果根目录不同,可以使用“%SystemRoot%”环境变量获取根目录,并且可以这样说。
%SystemRoot%\Windows\System32\PING.EXE www.google.de -t

另一种判断您尝试运行的命令是否可识别的方法是使用如下的WHERE命令。

where ping

如果命令可识别,它将输出路径,例如:
C:\Windows\System32\PING.EXE

否则将导致错误。

我刚刚按照你发布的内容操作了一遍,但是没有起作用。它只是打开了一个空白的命令窗口,什么也没有发生。我认为这与代码无关,而是与我的cmd.exe、路径变量或其他东西有关。 - Peter
你是怎么运行它的?无论如何,都要先进入你保存了 bat 文件的文件夹,然后可以通过命令提示符或直接双击来运行。它能正常工作。 - Rahul

3
我知道为什么你在使用文件名“ping”和代码“ping”,它会一直尝试运行自己,因为所选目录中有该文件。如果你想要真正地进行ping操作,请在ping命令之前加上这个命令:“cd C:\Windows\system32”,实际用于ping服务器的文件就在其中!

...或者只需将文件名更改为除'ping'之外的其他名称。 - Neil Regan

1

从批处理文件中,只使用以下命令ping一次ip:
Ping 192.168.199.10 -n 1

enter image description here


这如何为已接受的(四年前的)答案添加有用信息? - Stephan
这个回答从谷歌搜索的角度来看是正确的。我需要在iPhone上查找这个问题,以便告诉别人。非常有用 - 感谢您的回答。 - Sql Surfer

0

我使用了Mofi样例,并更改了一些参数,现在你可以使用-t。

@%SystemRoot%\system32\ping.exe -n -1 4.2.2.4


0
在这种情况下,你需要考虑的唯一事情就是你在电脑上的哪个目录中。 你的命令行窗口显示C:\users\rei0d\desktop\作为你当前的目录。
所以你真正需要做的只有一件事:
通过命令cd ..“向上”移除desktop
因此完整的命令应该是:
cd ..
ping XXX.XXX.XXX.XXX -t

不,你不需要做任何事情。由于C:\Windows\System32已写入PATH变量中,因此ping在全局范围内都可以使用。如果它对您不起作用,则必须检查您的PATH变量。 echo %PATH%应返回所提到的路径。如果没有,请通过“控制中心->系统->高级系统设置->高级选项卡->路径变量”进行编辑。 - jAC

0
在同一文件夹中有两个名为test.bat和ping.bat的脚本:
脚本test.bat包含一行:
ping google.com

脚本 ping.bat 包含以下行:

@echo off
echo Hello!
pause

执行 "test.bat" ,CMD 上的结果将会是:
Hello!
Press any key to continue . . .

为什么?因为“test.bat”正在调用“ping.bat”(“ping google.com”被解释为调用“ping.bat”脚本)。 如果脚本“ping.bat”包含“ping google.com”,同样的事情也会发生。脚本将在循环中执行自己。
避免这种情况的简单方法: 1. 不要将脚本命名为“ping.bat”。 2. 您可以将脚本命名为“ping.bat”,但在脚本内部使用“ping.exe google.com”而不是“ping google.com”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接