无法在 Server 2012 中运行批处理文件

无法在 Server 2012 中运行批处理文件

这个网站太棒了!我试图在 Server 2012 上运行一个简单的 .bat 文件,它将 ping 另一台服务器,过滤掉除一行之外的所有行,然后写入文件以供以后使用(然后我想将该文件发送到某个地方,但这是另一个讨论的项目!)。

我从论坛中搜索了一些命令,并找到了实现此操作所需的命令。当我从 ms-dos 一次运行这些命令时,它可以正常工作。但是,当将它们全部粘贴到 bat 文件中时,就会出现问题。我对服务器操作系统没有太多经验,所以可能是我遗漏了一些简单的东西。任何帮助都将不胜感激。

以下是我的指示

ping 10.18.89.154 >C:\pinglog.txt
FOR /F "skip=8 delims=" %i in (C:\pinglog.txt) do @echo %i >C:\TEMP.TXT
SET /P SHOW= < C:\TEMP.TXT
ECHO %SHOW% >C:\pinglog.txt

手动运行的结果如下:

数据包:已发送 = 4,已接收 = 4,丢失 = 0(0% 丢失),

但是当我在批处理文件中运行这些命令时,cmd 窗口挂在第一行,在 cmd 窗口中显示以下文本并生成一个空白文件...

C:\Users\administrator.WSI\Documents>ping 10.18.89.154 1>C:\pinglog.txt

有什么想法吗?

答案1

无法在 Server 2012 中运行批处理文件

这是一个更简单的方法来做你想做的事情(用一行命令):

ping 10.18.89.154 | findstr "Packets" > c:\pinglog.txt

上述命令将按照命令行或批处理文件的方式运行。

以下批处理文件使用 google.com 作为 ping 目标,因为我无法使用私有 IP 地址 ping 您的网络上的某些东西。

测试.cmd:

ping www.google.com | findstr "Packets" > pinglog.txt

示例输出:

C:\test>test

C:\test>ping www.google.com   | findstr "Packets"  1>pinglog.txt

C:\test>type pinglog.txt
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

C:\test>

要使用原始命令,for /f您需要在命令中将其替换%%%

FOR /F "skip=8 delims=" %%i in (C:\pinglog.txt) do @echo %%i >C:\TEMP.TXT

有没有办法隔离该行中的值,或者只能生成整行?

我只想恢复“已接收”值的原因是,如果该文件为“0”,我就可以基于此触发警报。

以下批处理文件将查找“Received”的值,如果该值为,则输出“Ping failed” 0,否则不输出任何内容。

作为奖励,它不使用任何文件。

echo "Ping failed"当您决定这应该是什么时,您可以用您的警报命令来替换。

测试.cmd:

@echo off
for /f "usebackq skip=8 tokens=7" %%i in (`ping 10.18.89.154`) do (
   set _result=%%i
   goto :done
   )
:done
if "%_result:~0,1%"=="0" echo "Ping failed"

进一步阅读

%%parameter可替换参数:在批处理文件中使用%%G(在命令行上%G

答案2

我遇到了与原始问题中描述的相同的问题。我找不到答案。我最终通过创建批处理文件的快捷方式解决了该问题。从快捷方式启动批处理文件时,文件会按预期执行。否则,它会挂在第一行。

相关内容